Pagini recente » Cod sursa (job #1927111) | Cod sursa (job #2601534) | Cod sursa (job #1046611) | Cod sursa (job #2151848) | Cod sursa (job #3323424)
#include <bits/stdc++.h>
#define NMAX 100005
#define ll long long
std::ifstream f("aib.in");
std::ofstream g("aib.out");
using namespace std;
int n, q, ans;
int a[NMAX], aib[NMAX];
void add(int x, int val){
for(int i=x;i<=n;i+=i&-i) aib[i]+=val;
}
ll sum(int x){
ll ans=0;
for(int i=x;i>=1;i-=i&-i) ans+=aib[i];
return ans;
}
void update(){
int x, val;
f >> x >> val;
add(x, val);
}
void solve1(){
int x, y;
f >> x >> y;
g << sum(y)-sum(x-1) << '\n';
}
int cb(ll x){
int st=1, dr=n, ans=-1;
while(st<=dr){
int mij=(st+dr)/2, k=sum(mij);
if(k>=x) ans=mij, dr=mij-1;
else st=mij+1;
}
return ans;
}
void solve2(){
int x;
f >> x;
g << cb(x) << '\n';
}
int main(){
f >> n >> q;
for(int i=1;i<=n;i++) f >> a[i], add(i, a[i]);
for(int i=1;i<=q;i++){
int cer;
f >> cer;
if(cer==0) update();
else if(cer==1) solve1();
else solve2();
}
}