Pagini recente » Borderou de evaluare (job #2062225) | Borderou de evaluare (job #544598) | Borderou de evaluare (job #2279956) | Cod sursa (job #31810) | Cod sursa (job #3161096)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n_elem, n_query,x,t,st,dr;
long long aib[100001];
void update(int pos, int val){
for(int i = pos; i <= n_elem; i+=i&-i)
aib[i]+=val;
}
int query(int pos){
int sum = 0;
for(int i = pos; i; i-=i&-i)
sum+=aib[i];
return sum;
}
int find_x(int val){
int l = 1,r = n_elem;
while(l<=r){
int mid = l + (r-l)/2;
if(aib[mid] == val)
return mid;
if(aib[mid]> val)
r = mid - 1;
else
l = mid + 1;
}
}
int main()
{
fin>>n_elem>>n_query;
for(int i = 1; i<=n_elem; i++){
fin>>x;
update(i, x);
}
for(int i = 1; i<=n_query; i++){
fin>>t;
if(t == 0){
fin>>st>>x;
update(st, x);
}
else if(t == 1){
fin>>st>>dr;
fout<<query(dr)-query(st-1)<<'\n';
}
else{
fin>>x;
fout<<find_x(x)<<'\n';
}
}
return 0;
}