Cod sursa(job #832538)

Utilizator LuffyBanu Lavinia Luffy Data 10 decembrie 2012 21:42:20
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <stdio.h>
#include <math.h>
#define Dim 100005
#define dim 317

using namespace std;

FILE *f=fopen("datorii.in","r"), *g=fopen("datorii.out","w");

int a[Dim],zone[dim];
int n,m,z,i,A,B,C,poz,pozb,pozc,sum,j;

int main()
{

   fscanf(f,"%d%d",&n,&m);

   z = sqrt(m);

   for(i=1; i<=m; i++)
    {fscanf(f,"%d",&a[i]);

     if(i%z == 0) zone[i/z] += a[i];
     else zone[i/z +1] += a[i];
    }


    for(i=1; i<=n; i++)
   {fscanf(f,"%d%d%d",&A,&B,&C);

    if(A == 0)
    {a[B]-=C;

    if(B%z == 0) pozb = B/z; //aflu in ce zona se afla indicele B
      else pozb = B/z+1;

    zone[pozb]-=C;
    }

    else
    {sum = 0;

      if(B%z == 0) pozb = B/z; //aflu in ce zona se afla indicele B
      else pozb = B/z+1;

      if(C%z == 0) pozc = C/z; //aflu in ce zona se afla indicele C
      else pozc = C/z+1;

      for(j=pozb; j<=pozc; j++) sum+=zone[j];

     for(j=pozb*z; j<B; j++) sum-=a[j];

     for(j=pozc*z; j>C; j--) sum-=a[j];

     fprintf(g,"%d\n",sum);
    }

   }

 return 0;
}