Cod sursa(job #2902984)

Utilizator elenaa_g23Elena Georgescu elenaa_g23 Data 17 mai 2022 00:00:34
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.43 kb
#include<iostream>
#include<fstream>

using namespace std;

ifstream f("datorii.in");
ofstream g("datorii.out");

int A[75001];

void update(int n, int l, int r, int pos, int val)
{
    if(l==r)
    {
        r=pos;
        A[n]=val;
        return;
    }
    int mid;
    mid=(l+r)/2;
    if(pos<=mid) update(2*n, l ,mid, pos, val);
    else update(2*n+1, mid+1, r, pos, val);
    A[n]=A[2*n] + A[2*n+1];

}

void update1(int n, int l, int r, int pos, int val)
{
    if(l==r)
    {
        r=pos;
        A[n]=A[n]-val;
        return;
    }
    int mid;
    mid=(l+r)/2;
    if(pos<=mid) update1(2*n, l ,mid, pos, val);
    else update1(2*n+1, mid+1, r, pos, val);
    A[n]=A[2*n] + A[2*n+1];

}

int query(int n, int l, int r, int a, int b)
{
    int v1=0, v2=0;
    if(a<=l && r<=b) return A[n];
    int mid;
    mid=(l+r)/2;
    if(a<=mid)
    {
        v1=query(2*n, l, mid, a, b);
    }

    if(b>mid)
    {
        v2=query(2*n+1, mid+1, r, a, b);
    }

    int s;
    s=v1+v2;
    return s;

}

int main()
{
    int N, M, x,operatie,a,b;
    f>>N>>M;
    for(int i=1;i<=N;i++)
        {f>>x; update(1,1,N,i,x);}
    for(int i=1;i<=M;i++)
    {
        f>>operatie>>a>>b;
        if(operatie==1)
        {
            g<<query(1,1,N,a,b);
            g<<'\n';
        }

        if(operatie==0)
        {
            update1(1,1,N,a,b);
        }

    }
    return 0;

}