Cod sursa(job #3264708)

Utilizator PetreIonutPetre Ionut PetreIonut Data 23 decembrie 2024 14:50:56
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>

using namespace std;

const int nMax=100005;
int n , m , k , x , y , c , a[nMax] , rez , aib[nMax];

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

int sum(int a)
{
    int rez=0;
    for(int i=a;i>=1;i-=i&-i) rez+=aib[i];
}

void add(int a , int val)
{
    for(int i=a;i<=n;i+=i&-i) aib[i]+=val;
}

int cb(int a[] , int x)
{
    int st=1 , dr=n , rez=0;
    while(st<=dr){
        int mij=(st+dr)/2;
        if(sum(mij)>x) dr=mij-1;
        else if(sum(mij)<x) st=mij+1;
        else dr=mij-1 , rez=mij;
    }
    return rez;
}

int main()
{
    f >> n >> m;
    for(int i=1;i<=n;i++) f >> a[i];
    for(int i=1;i<=n;i++){
            add(i , a[i]);
    }
    for(int i=1;i<=m;i++){
        f >> c;
        if(c==0){
            f >> x >> y;
            add(y , a[x]-y);
        }
        if(c==1){
            f >> x >> y;
            g << sum(y)-sum(x-1);
        }
        else{
            f >> k;
            g << cb(a , k);
        }
    }
}