Pagini recente » Cod sursa (job #2263220) | Cod sursa (job #477134) | Cod sursa (job #825390) | Cod sursa (job #2555888) | Cod sursa (job #989806)
Cod sursa(job #989806)
#include <fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n;
int v[100001];
inline void update(int pz,int x){
while(pz<=n){
v[pz]+=x;
pz+=pz&-pz;
}
return;
}
inline int query(int x,int y){
int s1=0,s2=0;
while(x>0){
s1+=v[x];
x-=x&-x;
}
while(y>0){
s2+=v[y];
y-=y&-y;
}
return s2-s1;
}
inline int search(int s){
int c;
for(c=1;c<n;c<<=1);
for(int i=0;c;c>>=1){
if(i+c<=n&&s>=v[i+c]){
i+=c;
s-=v[i];
if(!s) return i;
}
}
return -1;
}
int main()
{
int m;
f>>n>>m;
for(int i=1;i<=n;i++){
int x;
f>>x;
update(i,x);
}
for(int i=1;i<=m;i++){
int cs,x,y;
f>>cs;
switch(cs){
case 0: f>>x>>y; update(x,y); break;
case 1: f>>x>>y; g<<query(x-1,y)<<'\n'; break;
case 2: f>>x; g<<search(x)<<'\n'; break;
}
}
return 0;
}