Cod sursa(job #14314)

Utilizator pitradaPit-Rada Ionel-Vasile pitrada Data 8 februarie 2007 18:33:27
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<fstream>
#include<math.h>
using namespace std;
fstream f,g;

long A[15001],B[130][130],N,M,i,j,x,y,z,K,s,s1,s2,j1,j2,i1,i2,l;
int main()
{
f.open("datorii.in",ios::in);
g.open("datorii.out",ios::out);

f>>N>>M;
K=(long)ceil(sqrt((1.0*N));

for (i=0;i<=K*K;i++) A[i]=0;//f.f.important-presupun ca este vorba de K*K zile

for (i=1;i<=N;i++) f>>A[i];

for (j=0;j<K;j++)
    {
    B[j][0]=0;
    for (i=j*K+1;i<=j*K+K;i++)
       B[j][i-j*K]=B[j][i-1-j*K]+A[i];
    }
for (i=1;i<=M;i++)
    {
    f>>x>>y>>z;
    if (x==0) 
      {
      A[y]=A[y]-z;
      j=y/K;
      B[j][0]=0;
      for (l=j*K+1;l<=j*K+K;l++)
        B[j][l-j*K]=B[j][l-1-j*K]+A[l];      
      }
      else
      {
      j1=y/K; j2=z/K; i1=y%K+1; i2=z%K+1;
      if (j1==j2)s=B[j2][i2]-B[j1][i1-1];
         else
         {
         s1=B[j1][K]-B[j1][i1-1];
         s2=B[j2][i2];
         s=0;
         for(l=j1+1;l<j2;l++) s=s+B[l][K];
         s=s+s1+s2;
         }
      g<<s1+s+s2<<endl;
      }
   }

g.close();
f.close();
return 0;
}