Pagini recente » Cod sursa (job #423916) | Cod sursa (job #939684) | Cod sursa (job #1003971) | Cod sursa (job #1144692) | Cod sursa (job #1418883)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define maxn 15001
#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 a[i-p+1];
}
v[i]=build_bin(2*i)+build_bin(2*i+1);
return v[i];
}
int get_val(int x, int y)
{
int q=p,t,poz,st=0,dr=0;
while (q<x)
{
t=1;
while (q+2*t<x)
{
t*=2;
}
st += v[q/t];
q+=t;
}
q=p+n-1;
while (q>y)
{
t=1;
while (q-2*t>y)
{
t*=2;
}
dr += v[q/t];
q-=t;
}
return v[1]-st-dr;
}
void mod_val(int x, int y)
{
while (x>0)
{
v[x]-=y;
x/=2;
}
}
int solve()
{
p=1;
while (p<n) p*=2;
build_bin(1);
return 0;
}
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;
}