解析
并查集,将其终点作为并查集的根节点
注意特判结尾 n n n 的情况
//G
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define inf 0x3f3f3f3f
const int N=1e6+5;
int n,m;
int a[N],p[N];
int find(int x){
return x==p[x]?x:p[x]=find(p[x]);
}
void solve(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
p[i]=i;
}
while(m--){
int op,x,y;
cin>>op;
if(op==1){
cin>>x>>y;
a[x]-=y;
if(a[x]<=0){
if(x<n){
p[x]=find(x+1);
}
}
}
else{
cin>>x;
cout<<find(x)<<endl;
}
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t=1;
// cin>>t;
while(t--) solve();
return 0;
}