Pagini recente » Cod sursa (job #2008509) | Cod sursa (job #1305757) | Cod sursa (job #1680824) | Cod sursa (job #2471784) | Cod sursa (job #2571543)
#include <bits/stdc++.h>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int const MAXN = 1e5+10;
int aib[MAXN];
int N;
int read(int poz){
int sum = 0;
while (poz>0){
sum+=aib[poz];
poz-= (poz & -poz);
}
return sum;
}
void add(int poz, int val){
while (poz<=N){
aib[poz]+=val;
poz+= (poz & -poz);
}
}
int cauta(int target){
int ans=0;
int sum=0;
for (int bitmask=(1<<20); bitmask!=0; bitmask>>=1){
if (ans+bitmask<N && sum+aib[ans+bitmask]<target){
ans+=bitmask;
sum+=aib[ans];
}
}
ans++;
return (read(ans)==target) ? ans : -1;
}
int main(){
int m;
in >> N >> m;
for (int i=1; i<=N; ++i){
int nr;
in >> nr;
add(i, nr);
}
for (int i=1; i<=m; ++i){
int caz;
in >> caz;
if(caz==0){
int a, b;
in >> a >> b;
add(a, b);
}
else if (caz==1){
int a, b;
in >> a >> b;
out << read(b)-read(a-1) << '\n';
}
else{
int a;
in >> a;
out << cauta(a) << '\n';
}
}
}