Cod sursa(job #3215746)

Utilizator LilGoatCalin Andrei Cristian LilGoat Data 15 martie 2024 12:27:06
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int n,m,a[100000],t[100000],i,j,l,k,x,y,z;

void tree(int k)
{
    int i,p=k&-k;
    for(i=1;i<=p;i++)
        t[k]+=a[(k-p+i)];
}
void suma(int k,int x)
{
    while(k<=n){
        t[k]+=x;
        k+=(k&-k);
    }
}
int sum(int k)
{
    int s=0;
    while(k>=1){
        s+=t[k];
        k-=(k&-k);
    }
    return s;
}
int main()
{
    in>>n>>m;
    for(i=1;i<=n;i++){  
        in>>a[i];
        if(i%2==1)
            t[i]=a[i];
        else
            tree(i);
    }
    for(j=1;j<=m;j++){
        in>>x;
        if(x==0){
            in>>y>>z;
            suma(y,z);
        }
        else if(x==1){
            in>>y>>z;
            int s1=sum(y-1),s2=sum(z);
            out<<s2-s1<<endl;
        }
        else if(x==2){
            in>>y;
            int q=-1;
            for(i=1;i<=n;i++)
                if(t[i]==y){
                    q=i;
                    break;
                }
            out<<q<<endl;
        }
    }
}