Cod sursa(job #2549214)

Utilizator Catalin_GriuGriu Catalin Catalin_Griu Data 17 februarie 2020 14:03:35
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <bits/stdc++.h>
#define ll long long
#define pii pair<int, int>
#define pll pair<ll, ll>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");

int n, m, x, y, q;
int stree[100000];

int query(int x, int y, int st, int dr, int node)
{
    if(x<=st && y>=dr) return stree[node];
    int mid = (st+dr)/2, s1 = 0, s2 = 0;
    if(x<=mid) s1 = query(x, y, st, mid, node*2);
    if(y>mid) s2 = query(x, y, mid+1, dr, node*2+1);
    return s1+s2;
}

void update(int pos, int val, int st, int dr, int node)
{
    if(st == dr) stree[node] -=val;
    else{
        int mid = (st+dr)/2;
        if(pos<=mid) update(pos, val, st, mid, node*2);
        else    update(pos, val, mid+1, dr, node*2+1);
        stree[node] = stree[node*2]+stree[node*2+1];
    }
}

int main()
{
    fin>>n>>m;
    for(int i=1; i<=n; i++)
    {
        fin>>x;
        update(i, -1*x, 1, n, 1);
    }
    for(int i=1; i<=m; i++)
    {
        fin>>q>>x>>y;
        if(q)
            fout<<query(x, y, 1, n, 1)<<'\n';
        else
            update(x, y, 1, n, 1);
    }

    return 0;
}