Cod sursa(job #2904881)

Utilizator andreiiorgulescuandrei iorgulescu andreiiorgulescu Data 18 mai 2022 13:20:55
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("aib.in");
ofstream out("aib.out");

int n,m;
int aib[100005];

void update(int p,int x)
{
    for (int i = p; i <= n; i += (i & -i))
        aib[i] += x;
}

int query(int p)
{
    int sum = 0;
    for (int i = p; i >= 1; i -= (i & -i))
        sum += aib[i];
    return sum;
}

int main()
{
    in >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        int x;
        in >> x;
        update(i,x);
    }
    for (int i = 1; i <= m; i++)
    {
        int tip,x,y;
        in >> tip;
        if (tip == 0)
        {
            in >> x >> y;
            update(x,y);
        }
        if (tip == 1)
        {
            in >> x >> y;
            out << query(y) - query(x - 1) << '\n';
        }
        if (tip == 2)
        {
            in >> x;
            int st = 0,pas = 1 << 16;
            while (pas != 0)
            {
                if (st + pas <= n and query(st + pas) < x)
                    st += pas;
                pas /= 2;
            }
            st++;
            if (query(st) == x)
                out << st << '\n';
            else
                out << "-1\n";
        }
    }
    return 0;
}