Cod sursa(job #1513234)

Utilizator NacuCristianCristian Nacu NacuCristian Data 29 octombrie 2015 09:45:28
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <iostream>
#include <stdio.h>

using namespace std;

int x[60040];
int n,m;

/*int query(int st, int dr, int k)
{
    if(st<x && dr>y)
        return

}*/

int p,v;
int update(int st, int dr, int k)
{
    if(st>=dr)
    {
        x[k]=v;
        return v;
    }
    int mij=(st+dr)/2;
    int l;
    if(p<=mij)
        l=update(st,mij,2*k);
    else
        l=update(mij+1,dr,2*k+1);
    x[k]=x[k*2]+x[k*2+1];
    return x[k];
}

void update2(int st, int dr, int k)
{
    if(st>=dr)
    {
        x[k]-=v;
        return;
    }
    int mij=(st+dr)/2;
    int l;
    if(p<=mij)
        update2(st,mij,2*k);
    else
        update2(mij+1,dr,2*k+1);
    x[k]=x[2*k]+x[2*k+1];
}


int ma,a,b;

void query(int st, int dr, int k)
{
    if(a<=st && b>=dr)
    {
        ma+=x[k];
        return;
    }
    int mij=(st+dr)/2;
    if(a<=mij)
        query(st,mij,2*k);
    if(mij<b)
        query(mij+1, dr,2*k+1);
    return;
}

void citire()
{
    scanf("%d %d",&n,&m);
    for(int i=0;i<n;i++)
    {
        int x;
        scanf("%d ",&x);
        p=i,v=x;
        update(0,n-1,1);
    }
    for(int i=0;i<m;i++)
    {
        int op=0;
        scanf("%d",&op);
        if(op==0)
        {
            scanf("%d %d\n",&p,&v);
            p--;
            update2(0,n-1,1);
        }
        else
        {
            ma=0;
            scanf("%d %d\n",&a,&b);
            a--,b--;
            query(0,n-1,1);
            printf("%d\n",ma);

        }
    }

}



int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    citire();
    return 0;
}