Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<algorithm>
- using namespace std;
- typedef long long int ll;
- struct elem{
- ll cost;
- int idx;
- };
- bool mycmp(elem a,elem b){
- if(a.cost == b.cost){
- return a.idx < b.idx;
- }
- return a.cost < b.cost;
- }
- int main()
- {
- int n,k;
- scanf("%d %d",&n,&k);
- ll qs[n+1];qs[0] = 0;
- elem arr[n+1]; arr[0] = {0,0};
- for(int i = 1 ; i <= n ; i++){
- ll x;
- scanf("%lld",&x);
- qs[i] = qs[i-1] + x;
- arr[i] = {qs[i]<0?0:qs[i],i};
- }
- sort(arr,arr+n+1,mycmp);
- /* printf("Cost : ");for(int i = 0 ; i <= n ; i ++)printf("%lld ",arr[i].cost);printf("\n");
- printf("Indx : ");for(int i = 0 ; i <= n ; i ++)printf("%lld ",arr[i].idx );printf("\n");
- */
- for(int i = 1 ; i <= n ; i ++){
- arr[i].idx = max(arr[i-1].idx , arr[i].idx);
- }
- for(int i = 0 ; i < k ; i ++){
- ll q;
- scanf("%lld",&q);
- int L = 0,R = n;
- int ans;
- while(L <= R){
- int m = (L+R)/2;
- // printf("Bsearch %d -> %lld\n",m,arr[m].cost);
- if(arr[m].cost <= q){
- ans = arr[m].idx;
- L = m + 1;
- }
- else{
- R = m - 1;
- }
- }
- printf("%d\n",ans);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement