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