Problem - 706B - Codeforces

https://codeforces.com/problemset/problem/706/B

因为没有看见xi的上限是1e5,就用了二分去做,实际上这道题因为可乐的价格上限是1e6,可以用复杂度为O(max_xi)的dp去做。

也就是说,当这道题的可乐数量上升,二分就容易超时,而可乐的价格上升则dp容易爆内存且超时。各有所长

#include<bits/stdc++.h>
using namespace std;
#define ll long long

int a[100005];

struct day{
    int idx;
    int coin;
    int cnt;
    day(int idx=0,int coin=0):idx(idx),coin(coin){}
}d[100005];

struct cmp{
    bool operator()(day &d1,day &d2){
        return d1.coin<d2.coin;
    }
};

struct cmp2{
    bool operator()(day &d1,day &d2){
        return d1.idx<d2.idx;
    }
};

int dp[100005];

int main(){
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    sort(a,a+n);

    int q;
    scanf("%d",&q);
    for(int i=0;i<q;i++){
        scanf("%d",&d[i].coin);
        d[i].idx=i;
    }
    sort(d,d+q,cmp());

    //d[0].cnt=upper_bound(a,a+n,d[0].coin)-a;
    for(int i=0;i<q;i++){
        d[i].cnt=upper_bound(a,a+n,d[i].coin)-a;
        //d[i].idx=i;
    }

    sort(d,d+q,cmp2());

    for(int i=0;i<q;i++){
        printf("%d\n",d[i].cnt);
        //d[i].idx=i;
    }
}

猜你喜欢

转载自www.cnblogs.com/Yinku/p/10278777.html
今日推荐