Pagini recente » Cod sursa (job #230382) | Cod sursa (job #1395862) | Cod sursa (job #544103) | Cod sursa (job #171989) | Cod sursa (job #2118438)
#include <iostream>
#include <fstream>
#define MAX 100001
using namespace std;
int n,m,sp[MAX],a,b,o;
int nsb(int nr){return nr^(nr&(nr-1));}
void update(int ind,int val){
for(;ind<=n;ind+=nsb(ind))sp[ind]+=val;
}
int query(int ind){
int ans=0;
for(;ind>=1;ind-=nsb(ind))ans+=sp[ind];
return ans;
}
int cautbin(int sum){
int st=1,dr=n,mij;
while(st<dr){
mij=(st+dr)/2;
if(query(mij)<sum)st=mij+1;
else dr=mij;
}
if(query(st)==sum)return st;
else return -1;
}
int main()
{
ifstream f ("aib.in");
ofstream g ("aib.out");
f>>n>>m;
for(int i=1;i<=n;i++){
f>>a;
update(i,a);
}
for(int i=1;i<=m;i++){
f>>o;
if(o==0){
f>>a>>b;
update(a,b);
} else if(o==1){
f>>a>>b;
g<<query(b)-query(a-1)<<'\n';
} else {
f>>a;
g<<cautbin(a)<<'\n';
}
}
f.close ();
g.close ();
return 0;
}