Pagini recente » Cod sursa (job #3332402) | Cod sursa (job #3339221) | Cod sursa (job #3315700) | Cod sursa (job #2060282) | Cod sursa (job #3343103)
#include <bits/stdc++.h>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int v[100005];
int sp[100005];
int n,m;
void update(int p,int x) {
for (int i = p; i <= n; i+=(i&-i)) {
sp[i]+=x;
}
}
int query(int x) {
int s=0;
for (int i=x;i>0;i-=(i&-i)) {
s+=sp[i];
}
return s;
}
void create() {
for (int i=1;i<=n;i++) {
for (int j = i; j <= n; j+=(j&-j)) {
sp[j]+=v[i];
}
}
}
int cb(int x) {
int st=1,dr=n,poz=n+1;
while (st<=dr) {
int mid=(st+dr)/2;
int k=query(mid);
if (k>=x) {
dr=mid-1;
poz=mid;
}
else {
st=mid+1;
}
}
return poz;
}
int main() {
in>>n>>m;
for (int i = 1; i <=n; i++) {
in>>v[i];
}
create();
while (m--) {
int c;
in>>c;
if (c==0) {
int p,x;
in>>p>>x;
update(p,x);
}
else if (c==1) {
int x,y;
in>>x>>y;
out<<query(y)-query(x-1)<<'\n';
}
else {
int k;
in>>k;
out<<cb(k)<<'\n';
}
}
return 0;
}