Cod sursa(job #3364053)

Utilizator nicoleta_iancuIancu Nicoleta nicoleta_iancu Data 28 august 2026 16:30:00
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.88 kb

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int>v;
ifstream fin("aib.in");
ofstream fout("aib.out");
struct AIB {
    vector<int>aib;
    int lsb(int& x) {
        return x & (-x);
    }
    int query(int poz) {
        int sum = 0;
        for (int i = poz; i > 0; i -= lsb(i)) {
            sum += aib[i];
        }
        return sum;
    }
    void update(int poz,int val) {
        for (int i = poz; i < aib.size(); i += lsb(i)) {
            aib[i] += val;
        }
    }
    int cb(int maxVal,int n) {

        int st = 1, dr = n;
        int rez = -1;
        int answr;//suma pe prefix
        while (st<=dr)
        {
            int mij = (st + dr) / 2;
            answr = query(mij);
            if (answr == maxVal) {
                rez = mij;
                st = mij + 1;
            }
            else if (query(mij) < maxVal) {
                st = mij + 1;
            }
            else {
                dr = mij - 1;
            }
        }
        return rez;
    }
};
int main()
{
    int n,q,x;
    fin >> n>>q;
    AIB crt;
    crt.aib.resize(n + 1);
    for (int i = 1; i <= n; ++i) {
        fin >> x;
        crt.update(i,x);
    }
    int op;
    int poz, val, st, dr,maxVal;

    while (q)
    {
        fin >> op;

        switch (op)
        {
            case 0:
                fin >> poz >> val;
                crt.update(poz, val);
                break;
            case 1:
                fin >> st >> dr;
                fout << crt.query(dr) - crt.query(st - 1) << "\n";
                break;
            case 2:
                fin >> maxVal;
                fout << crt.cb(maxVal,n)<<"\n";
                break;
            default:
                break;
            
        } 
        q--;
    }
    return 0;
}
//=^..^=