Cod sursa(job #113081)

Utilizator nicolaetitus12Nicolae Titus nicolaetitus12 Data 8 decembrie 2007 18:22:48
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <string.h>
#include <stdio.h>
#include <math.h>
#define N 15001
int main()
{FILE *fi,*fo;
 fi=fopen("datorii.in","r");
 fo=fopen("datorii.out","w");
// ifstream fi("datorii.in");
// ofstream fo("datorii.out");
 long n,m,a[N],e[125],i,j,g,p,q,f,d;
 memset(a,0,sizeof(a));
 memset(e,0,sizeof(e));
 fscanf(fi,"%ld %ld",&n,&m);
// fi>>n>>m;
 d=ceil(sqrt(n));//nr de intervale
 for (i=1;i<=n;i++)
 {fscanf(fi,"%ld",&g);
  //fi>>g;
  a[i]=a[i-1]+g;}
 for (i=1;i<=m;i++)
 {fscanf(fi,"%ld %ld %ld",&f,&p,&q);
//  fi>>f>>p>>q;
  if(f)
  {fprintf(fo,"%ld\n",a[q]+e[(q-1)/d+1]-a[p-1]-e[(p-2)/d+1]);
  // fo<<a[q]+e[(q-1)/d+1]-a[p-1]-e[(p-2)/d+1]<<'\n';
  }
  else
  {if(p%d==1)
   {for (j=p/d+1;j<=d;j++)
    {e[j]-=q;}
   }
   else
   {for (j=p;j<=((p-1)/d+1)*d;j++)
    {a[j]-=q;
    }
    for(j=(p-1)/d+2;j<=d;j++)
    {e[j]-=q;}
   }
  }
 }
 fclose(fi);
 fclose(fo);
 return 0;
}