Pagini recente » Cod sursa (job #953247) | Cod sursa (job #2049708) | Cod sursa (job #551668) | Autentificare | Cod sursa (job #2192137)
#include <fstream>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
const int N=100000;
int n,aib[N+5];
int m,tip,a,b;
int f(int x){
return x&(-x);
}
void add(int poz,int val){
for(int i=poz;i<=n;i+=f(i))
aib[i]+=val;
}
int prefix(int poz){
int sol=0;
for(int i=poz;i>=1;i-=f(i))
sol+=aib[i];
return sol;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
int a;
cin>>a;
add(i,a);
}
for(int i=1;i<=m;i++){
cin>>tip;
if(tip==0){
cin>>a>>b;
add(a,b);
}
if(tip==1){
cin>>a>>b;
cout<<prefix(b)-prefix(a-1)<<"\n";
}
if(tip==2){
cin>>a;
int r=0,pas=(1<<17);
while(pas){
if(r+pas<n && prefix(r+pas)<a)
r+=pas;
pas/=2;
}
r++;
if(prefix(r)==a)
cout<<r<<"\n";
else
cout<<"-1\n";
}
}
return 0;
}
/**
[1,1]
[1,2]
[3,3]
[1,4]
[5,5]
[5,6]
[7,7]
[1,8]
**/