Pagini recente » Cod sursa (job #3241502) | Cod sursa (job #2464559) | Cod sursa (job #1357845) | Cod sursa (job #2291198) | Cod sursa (job #3160727)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
long long v[100001], aib[100001];
int n,m;
void update(int p, long long val){
for(int i = p; i<=n; i+=(i&-i))
aib[i]+=val;
}
long long query1(int st, int dr){
long long sum = 0;
for(int i = dr; i>=st; i-=i&-i)
sum += aib[i];
if(st!=dr)
sum-=aib[st-1];
return sum;
}
long long query2(int x){
long long sum = 0;
for(int j = 1; j<=n; j++){
sum = 0;
for(int i = j; i>=1; i-=i&-i){
sum += aib[i];
}
if(sum == x)
return j;
}
}
int main()
{
fin>>n>>m;
for(int i=1; i<=n;i++){
fin>>v[i];
update(i, v[i]);
}
int t,x,st,dr;
for(int i=1; i<=m; i++){
fin>>t;
if(t == 0){
fin>>st>>x;
update(st,x);
}
else if(t == 1){
fin>>st>>dr;
fout<<query1(st,dr)<<'\n';
}
else{
fin>>x;
fout<<query2(x)<<'\n';
}
}
return 0;
}