Cod sursa(job #855389)

Utilizator blechereyalBlecher Eyal blechereyal Data 14 ianuarie 2013 21:55:13
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream>
#define NMAX 15001

using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int N,M,A[NMAX],buck[130],nobk,bksize;

int rad(int x)
  {
        int i=1;
        while (i*i<=x) i++;
        return i-1;
  }

void pay(int T,int val) //achitat valoare V in ziua T
{

 A[T]-=val;
 if (T<nobk*bksize)
   buck[T/bksize]-=val;
}


int query(int P,int Q)
{
    int i,sum=0;
    while ((Q>=0)&&(Q%bksize!=bksize-1))
        {sum+=A[Q];Q--;}
    if (P!=Q)
        while ((P<N)&&(P%bksize!=0)) {sum+=A[P];P++;}
    for (i=(P/bksize);i<=(Q/bksize);i++)
        sum+=buck[i];
    return sum;
}


int main()
{
    int i,a,b,sum,op;

    f>>N>>M;
     bksize=rad(N);
    nobk=N/bksize;
    for (i=0;i<nobk;i++) buck[i]=0;
    for (i=0;i<N;i++)
        {
            f>>A[i];
            buck[i/bksize]+=A[i];
        }
    for (i=1;i<=M;i++)
        {
            f>>op>>a>>b;
            switch (op)
                {
                case 0:
                pay(a-1,b);
                break;
                case 1:
                sum=query(a-1,b-1);
                g<<sum<<"\n";
                break;
                }
        }

    return 0;
}