Cod sursa(job #2629359)

Utilizator matei123Biciusca Matei matei123 Data 20 iunie 2020 12:40:25
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include<bits/stdc++.h>
using namespace std;
#define zeros(x) ((x ^ (x-1)) & x)
ifstream f("aib.in"); ofstream g("aib.out");
int n, m, c, x, y, i, j, k, s1, s2, aib[100005];
void add(int x, int y)
{   for(int i = x; i <= n; i += zeros(i)) aib[i] += y; }
int sum(int x)
{   int s = 0;
    for(int i = x; i > 0; i -= zeros(i)) s += aib[i];
    return s;
}
int cautbin(int s)
{   int m, temp, st = 1, dr = n;
    while(st <= dr)
    {   m = (st + dr) / 2;
        temp = sum(m);
        if(temp == s) return m;
        else if(temp > s) dr = m-1;
        else st = m + 1;
    }
    return -1;
}
int main()
{   f>>n>>m;
    for(i = 1; i <= n; ++i)
    {   f>>x; add(i, x); }
    for(i = 1; i <= m; ++i)
    {   f>>c>>x;
        if(c == 0)
        {   f>>y; add(x, y); }
        else if(c == 1)
        {   f>>y;
            g<<sum(y) - sum(x-1)<<'\n';
        }
        else g<<cautbin(x)<<'\n';
    }
    return 0;
}