Advertisement
SuitNdtie

NBK48

Jun 1st, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.09 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<algorithm>
  3. using namespace std;
  4. typedef long long int ll;
  5. struct elem{
  6.     ll cost;
  7.     int idx;
  8. };
  9.  
  10. bool mycmp(elem a,elem b){
  11.     if(a.cost == b.cost){
  12.         return a.idx < b.idx;
  13.     }
  14.     return a.cost < b.cost;
  15. }
  16. int main()
  17. {
  18.     int n,k;
  19.     scanf("%d %d",&n,&k);
  20.     ll qs[n+1];qs[0] = 0;
  21.    
  22.     elem arr[n+1]; arr[0] = {0,0};
  23.     for(int i = 1 ; i <= n ; i++){
  24.         ll x;
  25.         scanf("%lld",&x);
  26.         qs[i] = qs[i-1] + x;
  27.         arr[i] = {qs[i]<0?0:qs[i],i};
  28.     }
  29.     sort(arr,arr+n+1,mycmp);
  30. /*  printf("Cost : ");for(int i = 0 ; i <= n ; i ++)printf("%lld ",arr[i].cost);printf("\n");
  31.     printf("Indx : ");for(int i = 0 ; i <= n ; i ++)printf("%lld ",arr[i].idx );printf("\n");
  32. */ 
  33.     for(int i = 1 ; i <= n ; i ++){
  34.         arr[i].idx = max(arr[i-1].idx , arr[i].idx);
  35.     }
  36.     for(int i = 0 ; i < k ; i ++){
  37.         ll q;
  38.         scanf("%lld",&q);
  39.         int L = 0,R = n;
  40.         int ans;
  41.         while(L <= R){
  42.             int m = (L+R)/2;
  43.     //      printf("Bsearch %d -> %lld\n",m,arr[m].cost);
  44.             if(arr[m].cost <= q){
  45.                 ans = arr[m].idx;
  46.                 L = m + 1;
  47.             }
  48.             else{
  49.                 R = m - 1;
  50.             }
  51.         }
  52.         printf("%d\n",ans);
  53.     }
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement