Submission #1208190

#TimeUsernameProblemLanguageResultExecution timeMemory
1208190minhpkIntercastellar (JOI22_ho_t1)C++20
100 / 100
65 ms8004 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
int a;
int z[1000005];
int f[4000005];
vector <int> v;
void update(int id,int l,int r,int pos,int val){
    if (l==r){
        f[id]+=val;
        return;
    }
    int mid=(l+r)/2;
    if (pos<=mid){
        update(id*2,l,mid,pos,val);
    }else{
        update(id*2+1,mid+1,r,pos,val);
    }
    f[id]=f[id*2]+f[id*2+1];
}

int get(int id,int l,int r,int val){
    if (l==r){
        return l;
    }
    int mid=(l+r)/2;
    if (f[id*2]<val){
        return get(id*2+1,mid+1,r,val-f[id*2]);
    }else{
        return get(id*2,l,mid,val);
    }
}


signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> a;
    int cur=0;
    for (int i=1;i<=a;i++){
         cin >> z[i];
         int cnt=1;
         while (z[i]%2==0){
             cnt*=2;
             z[i]/=2;
         }

         update(1,1,a,i,cnt);
    }
   // cout << "\n";

    int q;
    cin >> q;
    while (q--){
         int x;
         cin >> x;
         int pos=get(1,1,a,x);
         cout << z[pos] << "\n";
    }

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...