Cod sursa(job #3308213)

Utilizator alesiodemiriAlesio Demiri alesiodemiri Data 23 august 2025 17:47:48
Problema Arbori indexati binar Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.86 kb
#include <iostream>
#include <queue>
#include <algorithm>
#include <set>
#include <map>
#include <stack>
#include <vector>
#include <string>
#include <deque>
#include <unordered_map>
#include <unordered_set>
#include <cmath>
#include <iomanip>

using namespace std;

#define ll long long

int n, m;
vector<int> values;
vector<int> sums;

void ReadData() {

    scanf("%d", &n);
    scanf("%d", &m);
    int sum = 0;
    for(int i = 0; i < n; ++i){
        int val = 0;
        scanf("%d", &val);
        values.push_back(val);
        sum += val;
        sums.push_back(sum);
    }
}

void Solve() {
    for(int i = 0; i < m; ++i){
        int ops = 0;
        int a = 0;
        int b = 0;
        scanf("%d", &ops);
        if (ops == 0)
        {
            scanf("%d", &a);
            scanf("%d", &b);

            values[a - 1] += b;

            int index = a - 1;
            while (index < sums.size()){
                sums[index]+= b;
                index++;
            }
        }
        else if (ops == 1)
        {
            scanf("%d", &a);
            scanf("%d", &b);

            if (a == 1){
                cout << sums[b - 1] << "\n";
            } else {
                cout << sums[b - 1] - sums[a - 2]<< "\n";
            } 
        }
        else {
            scanf("%d", &a);

            auto it = lower_bound(sums.begin(), sums.end(), a);
            if(it != sums.end() && *it== a){
                int index = it - sums.begin();
                cout << index + 1 << "\n";
            } else {
                cout <<"-1\n";
            }
            
        }
    }
    return;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    freopen("aib.in","r",stdin);
    freopen("aib.out","w",stdout);

    int t = 1;
    // cin >> t; // Uncomment for multiple test cases
    while (t--) {
        ReadData();
        Solve();   
    }
    return 0;
}