Cod sursa(job #2297353)

Utilizator btudorBazac Tudor btudor Data 5 decembrie 2018 19:01:31
Problema Arbori indexati binar Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 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;
    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;
        for(j=1;j<=n;j++)
        {
          s=query(j);
          if(s==a)
          {
            out<<j<<"\n";
            b=1;
          }
        }
        if(b==0)
          out<<"-1\n";
      }
    }
    return 0;
}