Pagini recente » Cod sursa (job #129736) | Cod sursa (job #1737122) | Cod sursa (job #2887967) | Cod sursa (job #1798521) | Cod sursa (job #1423091)
#include<fstream>
using namespace std;
int n, m, i, t, a, b, p, u, mid, s1, s2;
int v[100002];
ifstream fin("aib.in");
ofstream fout("aib.out");
int query(int p){
int sum = 0;
for(; p; p -= (p & (-p))){
sum += v[p];
}
return sum;
}
void update(int p, int val){
for(; p <= n; p += (p & (-p))){
v[p] += val;
}
}
int main(){
fin>> n >> m;
for(i = 1; i <= n; i++){
fin>> a;
update(i, a);
}
for(i = 1;i <= m; i++){
fin>> t;
if(t == 0){
fin>> a >> b;
update(a, b);
}
else{
if(t == 1){
fin>> a >> b;
s1 = query(a - 1);
s2 = query(b);
fout<< s2 - s1 <<"\n";
}
else{
fin>> a;
p = 1;
u = n;
while(p <= u){
mid = (p + u) / 2;
s1 = query(mid);
if(s1 >= a){
u = mid - 1;
}
else{
p = mid + 1;
}
}
fout<< p <<"\n";
}
}
}
return 0;
}