Pagini recente » Cod sursa (job #2665481) | Cod sursa (job #2914462) | Cod sursa (job #1757291) | Cod sursa (job #2645918) | Cod sursa (job #92351)
Cod sursa(job #92351)
// AiB
//#include <iostream>
#include <cstdio>
#define INF "datorii.in"
#define OUF "datorii.out"
#define NMAX 16384
using namespace std;
int t[NMAX]={0},n,val;
void insert(int poz)// updatez toate intervalele ce il contin pe t[poz]
{
int p,r;
p=poz;r=0;
while(p<=n)
{
t[p]+=val;
//printf("%d ",p);
while((p&(1<<r))==0) ++r;
p=p+(1<<r);
++r;
}
//printf("\n");
}
int query(int poz)// interoghez intervalul [1,poz]
{
int p,r,sol=0;
p=poz;r=0;
while(p>0)
{
sol+=t[p];
while((p&(1<<r))==0) ++r;
p-=(1<<r);
++r;
}
return sol;
}
int main()
{
FILE *in,*out;
in=fopen(INF,"r");
out=fopen(OUF,"w");
int a,b,c,m,i,s1,s2;
fscanf(in,"%d%d",&n,&m);
// val=2;insert(1);
for(i=1;i<=n;++i)
{
fscanf(in,"%d",&val);
//v[i]=val;
insert(i);
// printf("%d\n ",t[i]);
}
//printf("%d\n");
for(i=1;i<=m;++i)
{
fscanf(in,"%d%d%d",&a,&b,&c);
// printf("%d %d %d\n",a,b,c);
if(a)
{
s1=query(c);
s2=query(b-1);
fprintf(out,"%d\n",s1-s2);
}
else
{
val=c*(-1);
insert(b);
}
}
//system("pause");
fclose(in);fclose(out);
return 0;
}