Pagini recente » Cod sursa (job #2077139) | Cod sursa (job #394997) | Cod sursa (job #1219962) | Cod sursa (job #1828071) | Cod sursa (job #1855950)
#include <cstdio>
using namespace std;
int n, m, x, Arb[100001];
inline int Query(int i){
int Sum = 0;
for(int j = i; j != 0 ; j = j - (j & (-j)))
Sum += Arb[j];
return Sum;
}
inline int CautBin(int x){
int st = 1, dr = n;
while(st <= dr){
int mij = (st + dr) / 2;
int Sum = Query(mij);
if(Sum == x) return mij;
if(Sum > x) dr = mij - 1;
else st = mij + 1;
}
return -1;
}
inline void Update(int i, int x){
for(int j = i; j <= n ; j = j + (j & (-j)))
Arb[j] += x;
}
int main()
{
freopen("aib.in", "r", stdin);
freopen("aib.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i = 1; i <= n ; ++i){
scanf("%d", &x);
Update(i, x);
}
int tip, a, b;
for(int i = 1; i <= m ; ++i){
scanf("%d", &tip);
if(tip == 0){
scanf("%d%d", &a, &b);
Update(a, b);
}
else if(tip == 1){
scanf("%d%d", &a, &b);
printf("%d\n", Query(b) - Query(a - 1));
}
else {
scanf("%d", &a);
printf("%d\n", CautBin(a));
}
}
return 0;
}