Pagini recente » Cod sursa (job #1410287) | Cod sursa (job #2207806) | Cod sursa (job #1201463) | Cod sursa (job #1779603) | Cod sursa (job #472061)
Cod sursa(job #472061)
//arbori indexati binar
#include <stdio.h>
FILE *fin = fopen("datorii.in", "r");
FILE *fout = fopen("datorii.out", "w");
int datorie[ 15001 ];
int main()
{
int n, m, op, t, v;
fscanf(fin, "%d %d", &n, &m);
for (int i = 1; i <= n; i++)
{
int x = i, val;
fscanf(fin, "%d", &val);
while( x <= n)
{
datorie[x] += val;
x += ( x ^ (x - 1)) & x ;
}
}
for (int i = 1; i <= m; i++)
{
fscanf(fin, "%d %d %d", &op, &t, &v);
while ( op == 0 && t <= n )
{
datorie[t] -= v;
t += ( t ^ (t - 1)) & t;
}
if ( op == 1 )
{
int suma = 0, sumb = 0;
t--;
while ( t )
{
suma += datorie[t];
t -= (t ^ (t - 1)) & t;
}
while ( v )
{
sumb += datorie[v];
v -= (v ^ (v - 1)) & v;
}
fprintf( fout, "%d\n", sumb - suma );
}
}
fclose(fout);
fclose(fin);
return 0;
}