Cod sursa(job #402642)
#include <stdio.h>
#define NMAX 100010
#define zeros(x) ((x ^ (x-1)) & x)
int A[NMAX];
int N,M;
int comp(int x)
{
int i;
int ret=0;
for(i=x;i>0;i-=zeros(i))
ret +=A[i];
return ret;
}
void add(int x,int q)
{
int i;
for(i=x;i<=N;i += zeros(i))
A[i] += q;
}
int search(int x)
{
int i;
for(i=1;i<=N;i++)
if (comp(i) == x) return i;
return -1;
}
void citire()
{
FILE *fin=fopen("aib.in","r");
FILE *fout=fopen("aib.out","w");
int i,x;
fscanf(fin,"%d %d",&N,&M);
for(i=1;i<=N;i++)
{
fscanf(fin,"%d",&x);
add(i,x);
}
int a,b;
for(i=1;i<=M;i++)
{
fscanf(fin,"%d",&x);
if (x==0) {
fscanf(fin,"%d %d",&a,&b);
add(a,b);
}
if (x==1) {
fscanf(fin,"%d %d",&a,&b);
fprintf(fout,"%d\n",comp(b)-comp(a-1));
}
if (x==2) {
fscanf(fin,"%d",&a);
fprintf(fout,"%d\n",search(a));
}
}
fclose(fin);
fclose(fout);
}
int main()
{
citire();
}