Cod sursa(job #1039769)

Utilizator Dayanna000Amegica Dayanna Dayanna000 Data 23 noiembrie 2013 16:17:08
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int main()
{
    ifstream f("datorii.in");
    ofstream g("datorii.out");
    int n,m,x,y,a[15001],b[400],i,j,suma,nr,poz,poz1,s,cod,k;
    f>>n>>m;
    s=(int)sqrt(n);
    nr=n/s;
    k=1;
    for(i=1;i<=nr;++i)
      {suma=0;
      for(j=1;j<=s;j++)
        {   f>>a[k];
            suma=suma+a[k];
            k++;  }
        b[i]=suma;}
    if(nr*s!=n)
      for(i=nr*s+1;i<=n;i++)
        {   f>>a[k];
            b[nr]=b[nr]+a[k];
            k++; }
    for(int ii=1;ii<=m;ii++)
      {   f>>cod>>x>>y;
          if(x%s==0)
                poz=x/s;
                else
                poz=x/s+1;
          if(poz>nr)
            poz=nr;
          if(cod==0)
                {  b[poz]=b[poz]-y;   a[x]=a[x]-y;  }
             else
             {    suma=0;
                  if(y%s==0)
                    poz1=y/s;
                    else
                    poz1=y/s+1;
                  if(poz1>nr)
                    poz1=nr;
                  if(y-x>1)
                     for(i=poz+1;i<=poz1-1;i++)
                        suma=suma+b[i];
                  for(i=x;i<=poz*s;i++)
                    suma=suma+a[i];
                  for(i=y;i>=(poz1-1)*s+1;i--)
                    suma=suma+a[i];
                  g<<suma<<'\n';
             }
      }
    f.close();
    g.close();
    return 0;
}