Nu aveti permisiuni pentru a descarca fisierul grader_test19.in
Cod sursa(job #292263)
Utilizator | Data | 30 martie 2009 22:08:34 | |
---|---|---|---|
Problema | Datorii | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.19 kb |
#include <stdio.h>
#include <string.h>
#define NMAX 15006
int v[4*NMAX+10],a,b,poz,val;
int S;
void scade(int nod, int st, int dr)
{
if (st==dr) v[nod]-=val;
else
{
int mij=(st+dr)/2;
if (poz<=mij) scade(2*nod,st,mij);
else scade(2*nod+1,mij+1,dr);
v[nod]-=val;
}
}
void suma(int nod, int st, int dr)
{
if (a<=st && b>=dr) S+=v[nod];
else
{
int mij=(st+dr)/2;
if (a<=mij) suma(2*nod,st,mij);
if (b>mij) suma(2*nod+1,mij+1,dr);
}
}
int main()
{
FILE *fin=fopen("datorii.in","r");
FILE *fout=fopen("datorii.out","w");
int n,ev,tip,i;
fscanf(fin,"%d %d",&n,&ev);
memset(v,0,sizeof(v));
for (i=1;i<=n;i++)
{
fscanf(fin,"%d",&val);
poz=i; val=-val;
scade(1,1,n);
}
while (ev--)
{
fscanf(fin,"%d %d %d",&tip,&a,&b);
if (tip==0)
{
poz=a; val=b;
scade(1,1,n);
}
else
{
S=0;
suma(1,1,n);
fprintf(fout,"%d\n",S);
}
}
return 0;
}