Cod sursa(job #2297368)

Utilizator btudorBazac Tudor btudor Data 5 decembrie 2018 19:14:32
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,m,aib[100001];

void update(int poz,int x)
{
  for(;poz<=n;poz=poz+(poz&(-poz)))
    aib[poz]=aib[poz]+x;
}

int query(int poz)
{
  int s=0;
  for(;poz>0;poz=poz-(poz&(-poz)))
    s=s+aib[poz];
  return s;
}

int main()
{
    int i,j,x,s,a,b,mid,f,st,dr;
    in>>n>>m;
    for(i=1;i<=n;i++)
    {
      in>>x;
      update(i,x);
    }
    for(i=1;i<=m;i++)
    {
      in>>x;
      if(x==0)
      {
        in>>a>>b;
        update(a,b);
      }
      else
        if(x==1)
        {
          in>>a>>b;
          s=query(b)-query(a-1);
          out<<s<<"\n";
        }
      else
      {
        in>>a;
        b=0;
        st=1;
        dr=n;
        while(st<=dr)
        {
          mid=(st+dr)/2;
          s=query(mid);
          if(s==a)
          {
            b=1;
            out<<mid<<"\n";
            break;
          }
          else
            if(s>a)
              dr=mid-1;
          else
            st=mid+1;
        }
        if(b==0)
          out<<"-1\n";
      }
    }
    return 0;
}