Cod sursa(job #2960169)

Utilizator Laurentiu_BTarabic Laurentiu Gabriel Laurentiu_B Data 3 ianuarie 2023 18:02:02
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include<iostream>
#include<vector>
#include<fstream>
using namespace std;
vector<int> v;
int n;
void update(int i,int val)
{
  while(i<=n)
  {
    v[i]+=val;
    i+=(i&-i);
  }
}
int sum(int i)
{
  int s=0;
  while(i>0)
  {
    s+=v[i];
    i-=(i&-i);
  }
  return s;
}
int main()
{
    ifstream f("aib.in");
    ofstream g("aib.out");
  int m;
  f>>n>>m;
  v.resize(n+2);
  for(int i=1;i<=n;i++)
  {
      int x;
      f>>x;
      update(i,x);
  }
  for(int i=1;i<=m;i++)
  {
      int x,y,z;
      f>>x;
      if(x==0)
      {
          f>>y>>z;
          update(y,z);
      }
      if(x==1)
      {
        f>>y>>z;
        g<<sum(z)-sum(y-1)<<endl;
      }
      if(x==2)
      {
         f>>y;
         int m,st=0,dr=n,poz=-1;
         while(st<=dr)
         {
             m=(dr+st)/2;
             if(v[m]<y)
             st=m+1;
             if(v[m]>=y)
             {
                 dr-=m+1;
                 poz=m;
             }
         }
         if(v[poz]==y)
           g<<poz<<endl;
         else
            g<<-1<<endl;
      }
  }
  return 0;
}