Pagini recente » Cod sursa (job #2927896) | Cod sursa (job #37527) | Cod sursa (job #34211) | Cod sursa (job #1636948) | Cod sursa (job #2396630)
#include <fstream>
using namespace std;
#define maxn 100001
ifstream cin("aib.in");
ofstream cout("aib.out");
int N,M,s[maxn],op;
void read(int N){
s[0]=0;
for(int i=1; i<=N; i++){
cin>>s[i];
s[i]+=s[i-1];
}
}
int bs(int val){
int i,step;
for(step=1; step<N; step<<=1);
for(i=0; step; step >>=1){
if(i+step<=N){
if(val>=s[i+step]){
i+=step, val-= s[i];
if(!val) return i;
}
}
}
return -1;
}
void solve(int op){
int x,y;
if(op==0){
cin>>x>>y;
for(;x<=N; x++)
s[x]+=y;
} else if(op==1){
cin>>x>>y;
cout<<s[y]-s[x-1]<<'\n';
}else if(op==2){
int ok=1,i;
cin>>x;
cout<<bs(x)<<'\n';
}
}
int main()
{
cin>>N>>M;
read(N);
for(;M;M--){
cin>>op;
solve(op);
}
}