Pagini recente » Cod sursa (job #2838565) | Cod sursa (job #3153257) | Cod sursa (job #2189393) | Cod sursa (job #1564075) | Cod sursa (job #1316859)
#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;
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);
for (k=1; k<=n; k++)
if(query(k)==A)
{fprintf(fout,"%d\n",k);
break;}
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;
}