Pagini recente » Cod sursa (job #2720592) | Cod sursa (job #1891328) | Cod sursa (job #2893911) | Cod sursa (job #2137922) | Cod sursa (job #3175852)
#include <bits/stdc++.h>
using namespace std;
const int dim=1e5+5;
int n,m,aib[dim];
int lsb(int x){
return (x&(-x));
}
void update(int poz, int val){
for(int i=poz;i<=n;i+=lsb(i)){
aib[i]+=val;
}
}
int sum(int x){
int s=0;
for(int i=x;i>=1;i-=lsb(i)){
s+=aib[i];
}
return s;
}
int main(){
ifstream f("aib.in");
ofstream g("aib.out");
ios_base::sync_with_stdio(false);
f.tie(nullptr);
g.tie(nullptr);
f>>n>>m;
for(int i=1;i<=n;i++){
int x;
f>>x;
update(i,x);
}
while(m--){
int t;
f>>t;
if(t==0){
int x,y;
f>>x>>y;
update(x,y);
}
if(t==1){
int x,y;
f>>x>>y;
g<<sum(y)-sum(x-1)<<'\n';
}
if(t==2){
int x;
f>>x;
int st=1,dr=n,sol=-1;
while(st<=dr){
int mid=(st+dr)/2;
int s=sum(mid);
if(s<x){
st=mid+1;
}
else
if(s>x){
dr=mid-1;
}
else{
sol=mid;
dr=mid-1;
}
}
g<<sol<<'\n';
}
}
return 0;
}