Pagini recente » Cod sursa (job #271273) | Cod sursa (job #302386) | Cod sursa (job #1019954) | Cod sursa (job #2394785) | Cod sursa (job #2633726)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
const int NMAX=1e5;
int N, t[NMAX+1];
int f(int i) {
return i&(-i);
}
int query(int i) {
int sol=0;
while(i>0) {
sol+=t[i];
i-=f(i);
}
return sol;
}
void add(int i, int x) {
while(i<=N) {
t[i]+=x;
i+=f(i);
}
}
int find(int x) {
int k=log2(N), r=0, cur=0;
for(int i=(1<<k);i>=1;i/=2) {
if(r+i<=N && cur+t[r+i]<x) {
r+=i;
cur+=t[r];
}
}
++r;
if(query(r)!=x)
return -1;
return r;
}
int main() {
int M;
int p, a, b;
fin>>N>>M;
for(int i=1;i<=N;++i) {
fin>>a;
add(i, a);
}
for(int i=1;i<=M;++i) {
fin>>p;
if(p==0) {
fin>>a>>b;
add(a, b);
}
if(p==1) {
fin>>a>>b;
fout<<(query(b)-query(a-1))<<'\n';
}
if(p==2) {
fin>>a;
fout<<find(a)<<'\n';
}
}
return 0;
}