Pagini recente » Cod sursa (job #165772) | Cod sursa (job #660279) | Cod sursa (job #1945726) | Cod sursa (job #1767620) | Cod sursa (job #633689)
Cod sursa(job #633689)
#include <stdio.h>
#define DIM 100001
int A[DIM];
int N, i, x, y, z, M;
inline int lsb(int x){
return x&-x;
}
void update(int x, int v) {
for (;x<=N;x+=lsb(x))
A[x]+=v;
}
int query(int x) {
int s;
for (s=0;x;x-=lsb(x))
s+=A[x];
return s;
}
int op3(int k) {
int p = 1, u = N, m;
while (p<=u) {
m = (p+u)/2;
if (query(m) >= k)
u = m-1;
else
p = m+1;
}
return p;
}
int main() {
FILE *f = fopen("aib.in","r");
FILE *g = fopen("aib.out","w");
fscanf(f,"%d %d",&N, &M);
for (i=1;i<=N;i++) {
fscanf(f,"%d",&x);
update(i, x);
}
for (i=1;i<=M;i++) {
fscanf(f,"%d",&x);
if (x == 0) {
fscanf(f,"%d %d",&y, &z);
update(y,z);
} else if (x == 1) {
fscanf(f,"%d %d",&y, &z);
fprintf(g,"%d\n",query(z) - query(y-1));
} else {
fscanf(f,"%d",&y);
fprintf(g,"%d\n",op3(y));
}
}
fclose(f);
fclose(g);
return 0;
}