Cod sursa(job #3165047)

Utilizator catalinmarincatalinmarin catalinmarin Data 5 noiembrie 2023 12:32:39
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int aint[60005];
const int mx = 15000;
int answer;
void update(int nod, int st, int dr, int val, int zi, int modifier){
    if (st == dr){
        aint[nod] += modifier * val;
        return;
    }
    int mid = (st + dr) / 2;
    if (zi <= mid){
        update(2 * nod, st, mid, val, zi, modifier);
    } else {
        update(2 * nod + 1, mid + 1, dr, val, zi, modifier);
    }
    aint[nod] = (aint[2 * nod] + aint[2 * nod + 1]);
}
void query(int nod, int st, int dr, int qst, int qdr){
    if (st == dr || (qst <= st && dr <= qdr)){
        answer += aint[nod];
        return;
    }
    int mid = (st + dr) / 2;
    if (qst <= mid){
        query(2 * nod, st, mid, qst, qdr);
    }
    if (qdr > mid){
        query(2 * nod + 1, mid + 1, dr, qst, qdr);
    }
}
int main(){
    int n, m;
    fin >> n >> m;
    for (int i = 1; i <= n; i++){
        int x;
        fin >> x;
        update(1, 1, mx, x, i, 1);
    }
    for (int i = 1; i <= m; i++){
        int qry, nr1, nr2;
        fin >> qry >> nr1 >> nr2;
        if (qry == 0){
            update(1, 1, mx, nr2, nr1, -1);
        } else {
            answer = 0;
            query(1, 1, mx, nr1, nr2);
            fout << answer << '\n';

        }
    }
}