Cod sursa(job #2802955)

Utilizator alexioana_2006Apostolache Alexia alexioana_2006 Data 19 noiembrie 2021 09:45:37
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>
#define ub(x) (x&(-x))
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m,i,x,aib[400005],a,b,ex;
void Add(int x, int val)
{
    for(int i=x;i<=n;i+=ub(i))
        aib[i]+=val;
}
int sum(int x)
{
    int s=0;
    for(int i=x;i>0;i-=ub(i))
        s+=aib[i];
    return s;
}
int cautbin(int x) {

    int st=1,dr=n;

    while (st<=dr) {

        int mid=(st+dr)/2;
        int s=sum(mid);
        if (x==s)
            return mid;
        if (x>s)
            st=mid+1;
        else
            dr=mid-1;
    }
    return -1;

}
int main()
{
  fin>>n>>m;
  for(i=1;i<=n;i++)
  {
      fin>>x;
      Add(i,x);
  }
  for(i=1;i<=m;i++)
  {
      fin>>ex;
      if(ex==0)
      {
          fin>>a>>b;
          Add(a,b);
      }
     else if(ex==1)
     {
         fin>>a>>b;
         fout<<sum(b)-sum(a-1)<<'\n';

     }
     else
     {
         fin>>a;
         fout<<cautbin(a)<<'\n';
     }
  }

    return 0;
}