Pagini recente » Cod sursa (job #1892734) | Cod sursa (job #2738865) | Cod sursa (job #74308) | Cod sursa (job #2928216) | Cod sursa (job #1818615)
#include <bits/stdc++.h>
#define NMax 100001
#define zero(x) ((x) & (-x))
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n,m,p,poz,val,x,y;
int TR[NMax];
void add(int nr, int x){
for(int i = nr; i <= n; i += zero(i))
TR[i] += x;
}
int sum(int poz){
int s = 0;
for(int i = poz; i >= 1; i -= zero(i))
s += TR[i];
return s;
}
int cautbin(int lo, int hi,int k){
int mid;
while(lo <= hi){
mid = (lo + hi) / 2;
int s = sum(mid);
if(s == k){
return mid;
}else
if(s < k){
lo = mid + 1;
}else
if(s > k){
hi = mid - 1;
}
}
return 0;
}
int main()
{
f >> n >> m;
for(int i = 1; i <= n; ++i){
f >> x;
add(i,x);
}
for(int i = 1; i <= m; ++i){
f >> p;
if(p == 0){
f >> poz >> val;
add(poz,val);
}
if(p == 1){
f >> x >> y;
g << sum(y) - sum(x - 1) << '\n';
}
if(p == 2){
f >> x;
int e = cautbin(1,n,x);
if(e == 0){
g << -1 << '\n';
}else{
g << e << '\n';
}
}
}
return 0;
}