Pagini recente » Cod sursa (job #672499) | Cod sursa (job #2735181) | Cod sursa (job #274031) | Cod sursa (job #1992351) | Cod sursa (job #1418947)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define maxn 35001
#define maxm 100001
struct trip
{
int t;
int x, y;
};
int n,m,i,p;
int a[maxn];
int v[2*maxn];
trip q[maxn];
void readdata()
{
FILE *f = fopen("datorii.in","rt");
fscanf(f,"%d%d",&n,&m);
for (i=1;i<=n;i++)
{
fscanf(f,"%d",&a[i]);
}
for (i=1;i<=m;i++)
{
fscanf(f,"%d%d%d",&q[i].t,&q[i].x,&q[i].y);
}
fclose(f);
}
int build_bin(int i)
{
if (i>=p)
{
v[i]=a[i-p+1];
return v[i];
}
v[i]=build_bin(2*i)+build_bin(2*i+1);
return v[i];
}
int get_val(int x, int y)
{
long long st=0, dr=0;
int next;
while (x>1)
{
next=x/2;
if ((x%2)==1)
{
st+=v[x-1];
}
x=next;
}
while (y>1)
{
next=y/2;
if ((y%2)==0)
{
dr+=v[y+1];
}
y=next;
}
return v[1]-st-dr;
}
void mod_val(int x, int y)
{
while (x>0)
{
v[x]-=y;
x/=2;
}
}
void solve()
{
p=1;
while (p<n) p*=2;
build_bin(1);
}
void writedata()
{
FILE *f = fopen("datorii.out","wt");
for (i=1;i<=m;i++)
{
if (q[i].t)
{
fprintf(f,"%d\n",get_val(q[i].x+p-1,q[i].y+p-1));
}
else
{
mod_val(q[i].x+p-1,q[i].y);
}
}
fprintf(f,"\n");
fclose(f);
}
int main()
{
readdata();
solve();
writedata();
return 0;
}