Mai intai trebuie sa te autentifici.
Cod sursa(job #89952)
Utilizator | Data | 7 octombrie 2007 21:21:22 | |
---|---|---|---|
Problema | Datorii | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.88 kb |
#include<stdio.h>
int arb[32768], val, unde;
//int s[16384];
void adauga(int poz, int st, int dr)
{
if ((unde>=st) && (unde<=dr))
arb[poz]+=val;
if (st==dr) return;
adauga(poz*2, st, (st+dr)/2);
adauga(poz*2+1, (st+dr)/2+1, dr);
return;
}
int intreaba(int poz, int st, int dr)
{
if ((unde>dr) || (val<st))
return 0;
if ((unde<=st) &&(dr<=val))
return arb[poz];
return intreaba(poz*2, st, (st+dr)/2) + intreaba(poz*2+1, (st+dr)/2+1, dr);
}
int main()
{
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
int n, m, tip, i;
scanf("%d%d", &n, &m);
for (unde=1; unde<=n; unde++)
{
scanf("%d", &val);
adauga(1, 1, n);
}
for (i=1; i<=m; i++)
{
scanf("%d%d%d", &tip, &unde, &val);
if (tip==0)
{
val*=-1;
adauga(1, 1, n);
}
else
{
printf("%d\n", intreaba(1, 1, n));
}
}
return 0;
}