Cod sursa(job #2609384)

Utilizator tavi255Varzaru Octavian Stefan tavi255 Data 2 mai 2020 15:32:19
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
//#include <iostream>
#include <fstream>
using namespace std;


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

const int Max=100005;

int flip(int x) {return (x & (-x) );}

int n,m,aib[Max];

int suma(int x)
{
    int s=0;
    for(int i=x;i>=1;i-=flip(i))
      s+=aib[i];
    return s;
}

int suminterval(int a,int b)
{
    return suma(b)-suma(a-1);
}

void update(int x,int val)
{
    for(int i=x;i<=n;i+=flip(i))
        aib[i]+=val;
}

int cautarebin(int x)
{
    int st=1,dr=n;
    while(st<=dr)
    {
        int mij=(st+dr)/2; int s=suma(mij);
        if(s==x)
            return mij;
        else if(s<x)
            st=mij+1;
        else
            dr=mij-1;
    }
    return -1;
}

int main()
{
    in>>n>>m; int x;
    for(int i=1;i<=n;i++)
    {
        in>>x; update(i,x);
    }
    int p,a,b;
    for(int i=1;i<=m;i++)
    {
      in>>p; if(p==0) {in>>a>>b; update(a,b);}
      else if(p==1) {in>>a>>b; out<<suminterval(a,b)<<"\n"; }
      else
      {
          in>>a; out<<cautarebin(a)<<"\n";
      }
    }
    return 0;
}