Cod sursa(job #2901697)

Utilizator Stefania_RincuRincu Stefania Stefania_Rincu Data 14 mai 2022 11:43:42
Problema Datorii Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>
using namespace std;
int arb[60000], v[15000];
void create(int n, int st, int dr){
    if(st == dr){arb[n] = v[st];return;}
    create(n*2, st, (st + dr)/2);
    create(n*2+1, (st + dr)/2 + 1, dr);
    arb[n] = arb[n*2] + arb[n*2+1];}
void update(int n, int st, int dr, int poz, int x){
    if(poz < st || poz > dr)return;
    if(st == dr){arb[n] -= x;return;}
    update(2*n, st, (st + dr)/2, poz, x);
    update(2*n + 1, (st + dr)/2 + 1, dr, poz, x);
    arb[n] = arb[2*n] + arb[2*n+1];}
int sum(int n, int st, int dr, int x, int y){
    if(dr < x || st > y)return 0;
    if(x <= st && dr <= y)return arb[n];
    return sum(n*2, st, (st + dr)/2, x, y) + sum(n*2+1, (st + dr)/2+1, dr, x, y);}
int main(){
    int n, m;
    ifstream in("datorii.in");
    ofstream out("datorii.out");
    in>>n>>m;
    for(auto i = 1; i <= n; i++)in>>v[i];
    create(1, 1, n);
    int op, x, y;
    for(auto i = 0; i < m; i++){in>>op>>x>>y;if(op)out<<sum(1, 1, n, x, y)<<"\n";else update(1, 1, n, x, y);}
    in.close();out.close();
    return 0;}