Cod sursa(job #2355855)

Utilizator BogdanAlexandruBogdan-Alexandru Dig BogdanAlexandru Data 26 februarie 2019 12:52:41
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <stdio.h>

using namespace std;
FILE *f,*g;
int arbint[4*15001],N,M,X,P;
void CreateARB(int st,int dr,int NOD)
{
    int Middle=(st+dr)/2;
    if(st==dr)
    {
        arbint[NOD]+=X;
        return;
    }
    if(P<=Middle)CreateARB(st,Middle,2*NOD);
    else
        CreateARB(Middle+1,dr,2*NOD+1);
    arbint[NOD]=arbint[2*NOD]+arbint[2*NOD+1];
}
int SUM;
void Read()
{
    int i;
    fscanf(f,"%d %d",&N,&M);
    for(i=1;i<=N;i++)
        P=i,fscanf(f,"%d",&X),CreateARB(1,N,1);
}
int A,B;
void Search(int st,int dr,int NOD)
{
    int Middle=(st+dr)/2;
    if(A<=st&&dr<=B)
    {
        SUM+=arbint[NOD];
        return;
    }
    if(Middle>=A)
        Search(st,Middle,2*NOD);
    if(Middle<B)Search(Middle+1,dr,2*NOD+1);
}
void SOLVE()
{
    int option;
    while(M)
    {
        M--;
        fscanf(f,"%d %d %d",&option,&A,&B);
        if(!option)
        {
            X=(-1)*B,P=A;
            CreateARB(1,N,1);
            continue;
        }
        SUM=0;
        Search(1,N,1);
        fprintf(g,"%d\n",SUM);
    }
}
int main()
{
    f=fopen("datorii.in","r");
    g=fopen("datorii.out","w");
    Read();SOLVE();
    fclose(f);fclose(g);
    return 0;
}