#include using namespace std; struct Fenwick_tree{ int siz=1; vector dat; Fenwick_tree(int N) : dat(N,0){ siz=N; } Fenwick_tree(vector A) : dat(A.size(),0){ siz=(int)(A.size()); vector sum(siz+1,0); for(int i=1;i<=siz;i++){ sum[i]=sum[i-1]+A[i-1]; } for(int i=0;i0){ if(ans+h>siz){ h/=2; continue; } if(res+dat[ans+h-1]<=x){ res+=dat[ans+h-1]; ans+=h; } h/=2; } return ans; } }; signed main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int N,Q; cin >> N >> Q; vector A(N); for(int i=0;i> A[i]; } vector data=A; vector> query; for(int i=0;i> c; if(c==1){ int k; long long x; cin >> k >> x; vector vec={c,k,x}; data.emplace_back(x); query.emplace_back(vec); continue; } if(c==2){ vector vec={c}; query.emplace_back(vec); continue; } int k; cin >> k; vector vec={c,k}; query.emplace_back(vec); } vector data2=data; sort(data2.begin(),data2.end()); data2.erase(unique(data2.begin(),data2.end()),data2.end()); for(long long &i : data){ i=lower_bound(data2.begin(),data2.end(),i)-data2.begin(); } vector relation(*max_element(data.begin(),data.end())+1); for(int i=0;i B=A; stack change; Fenwick_tree tree(relation.size()); for(int i=0;i> change2; for(int i=0;i