zoukankan      html  css  js  c++  java
  • Codeforces

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

    因为没有看见 $x_i$ 的上限是 $10^5$ ,就用了二分去做,实际上这道题因为可乐的价格上限是 $10^6$ ,可以用复杂度为 $O(max(x_i))$ 的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
    ",d[i].cnt);
            //d[i].idx=i;
        }
    }

     2019-01-16

  • 相关阅读:
    清北刷题班day3 morning
    [NOI1997] 积木游戏(dp)
    [NOI1999] 棋盘分割(推式子+dp)
    2017北京国庆刷题Day7 afternoon
    湖南集训day8
    湖南集训day7
    湖南集训day6
    湖南集训day5
    湖南集训day4
    湖南集训day3
  • 原文地址:https://www.cnblogs.com/Yinku/p/10278777.html
Copyright © 2011-2022 走看看