Pagini recente » Cod sursa (job #1070670) | Cod sursa (job #499110) | Cod sursa (job #2307108) | Cod sursa (job #1359006) | Cod sursa (job #1575250)
#include <fstream>
#include <algorithm>
#define dim 100005
#define bit(x) (x&(-x))
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,i,v[dim],A[dim],x,m,a,b,c;
int query(int p){
int sum=0;
for(int i=p;i>=1;i-=bit(i)){
sum+=A[i];
}
return sum;
}
void update(int p, int val){
for(int i=p;i<=n;i+=bit(i)){
A[i]+=val;
}
}
int cautare(int val){
int i=0,j=0,sum=0;
for(j=1;j<n;j*=2);
for(;j>0;j/=2){
if(i+j<n){
if(sum+A[i+j]<val){
sum+=A[i+j];
i=i+j;
}
}
}
if(query(i+1)==val){
return i+1;
}
else{
return -1;
}
}
int main(){
fin>>n>>m;
for(i=1;i<=n;i++){
fin>>x;
update(i,x);
}
for(i=1;i<=m;i++){
fin>>a;
if(a==0){
fin>>b>>c;
update(b,c);
}
else{
if(a==1){
fin>>b>>c;
fout<<query(c)-query(b-1)<<"\n";
}
else{
fin>>b;
fout<<cautare(b)<<"\n";
}
}
}
return 0;
}