Cod sursa(job #3129908)

Utilizator otilia_nedelcu@yahoo.comGutanu Tiberiu [email protected] Data 16 mai 2023 11:33:17
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <algorithm>
#include <fstream>
using namespace std;
int aib[100002],n,m;
ifstream f("aib.in");
ofstream g("aib.out");
void update(int poz, int val)
{
  for (int i=poz;i<=n;i+=(i&(-i)))
    aib[i]=aib[i]+val;
}
int sum(int poz)
{
  int s = 0;
  for (int i = poz; i >= 1; i -= (i & (-i) ))
    s += aib[i];
  return s;
}
int main()
{
    f>>n>>m;
    for (int i=1;i<=n;i++)
    {
      int x;
      f>> x;
      update(i,x);
    }
    for (int i=1;i<=m;i++)
    {
      int t,a,b;
      f>>t;
      if (t==0) {
        f>>a>>b;
        update(a,b);
      }
      else if (t==1) {
        f>>a>>b;
        g<<sum(b)-sum(a - 1)<<"\n";
      }
      else
        {
        f>>a;
        int st=1,dr=n,ok=0;
        while (st<=dr) {
          int mij=(st+dr)/2;
          int tmp=sum(mij);
         if (tmp<a)
            st=mij+1;
          else
            dr=mij-1;
        }

        if(sum(st)==a)
            g<<st<<'\n';
        else
            g<<-1<<'\n';
      }
    }
     return 0;
}