Pagini recente » Cod sursa (job #2496124) | Cod sursa (job #1999433) | Cod sursa (job #2760211) | Cod sursa (job #1617047) | Cod sursa (job #1316864)
#include <cstdio>
#define NMAX 100001
using namespace std;
FILE* fin=fopen("aib.in","r");
FILE* fout=fopen("aib.out","w");
int n,m,a[NMAX],s[NMAX];
void citire();
void update(int poz,int val);
int query(int p);
int main()
{
int i,q,A,b,k,x,gasit;
citire();
for (i=1; i<=m; i++)
{
fscanf(fin,"%d",&q);
if (q==0)
{
fscanf(fin,"%d %d",&A,&b);
update(A,b);
continue;
}
if (q==1)
{
fscanf(fin,"%d %d",&A,&b);
fprintf(fout,"%d\n",query(b)-query(A-1));
continue;
}
if (q==2)
{
fscanf(fin,"%d",&A);
gasit=0;
for (k=1; k<=n; k++)
if(query(k)==A)
{fprintf(fout,"%d\n",k);
gasit=1;
break;}
if (!gasit) fprintf(fout,"-1\n");
continue;
}
}
return 0;
}
void citire()
{
int i;
fscanf(fin,"%d %d",&n,&m);
for (i=1; i<=n; i++)
fscanf(fin,"%d",&a[i]);
for (i=1; i<=n; i++)
update(i,a[i]);
}
void update(int poz,int val)
{
int i;
for (i=poz; i<=n; i+=( (i^ (i-1) ) & i ))
s[i]+=val;
}
int query(int p)
{
int sum=0,i;
for (i=p; i; i-=( (i^ (i-1) ) & i ))
sum+=s[i];
return sum;
}