Cod sursa(job #854785)

Utilizator blechereyalBlecher Eyal blechereyal Data 14 ianuarie 2013 00:23:47
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>
#include <string.h>
#include <math.h>
#define MAXN 15001
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
inline int bk(int x) {return int(sqrt(x));}
int N,M,A[MAXN],buck[MAXN];

void pay(int T,int val) //achitat valoare V in ziua T
    {
    buck[bk(T)]-=val;
    A[T]-=val;
    }

int query(int P,int Q){
    int sum=0,i;
    while ((bk(P)!=bk(P+1))&&(P<N)) sum+=A[P++];
    while ((bk(Q)!=bk(Q-1))&&(Q>1)) sum+=A[Q--];
    for (i=bk(P);i<bk(Q);i++)
        sum+=buck[i];

    return sum;
}


int main()
{
    int i,a,b,op;
    f>>N>>M;
    for (i=1;i<=N;i++)
        f>>A[i];
    memset(buck,0,sizeof(buck));
    for (i=1;i<=N;i++)
        buck[bk(i)]+=A[i];

    for (i=1;i<=M;i++){
        f>>op>>a>>b;
        switch (op)
            {
            case 0:
            pay(a,b);
            break;
            case 1:
            g<<query(a,b)<<"\n";
            break;
            }
        }

    return 0;
}