Cod sursa(job #991659)

Utilizator paul_danutDandelion paul_danut Data 31 august 2013 09:33:54
Problema Arbori indexati binar Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>

using namespace std;

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

int binsum1(int v[],int st,int dr)
{
    if(st==dr)
       return v[st];
    else
       {int m=(st+dr)/2;
       return binsum1(v,st,m)+binsum1(v,m+1,dr);}
}

void binsum2(int v[],int st,int dr,int &sum,int a,int &b)
{
    if(sum<a)
       {if(st==dr)
          {sum+=v[st];
          b++;}
       else
           {int m=(st+dr)/2;
           binsum2(v,st,m,sum,a,b);
           binsum2(v,m+1,dr,sum,a,b);}}
}
int n,m,ct,a,b,sum,i,v[100001];

int main()
{
    f>>n>>m;
    for(i=1;i<=n;i++)
        f>>v[i];
    for(i=1;i<=m;i++)
       {
           f>>ct;
           if(ct==0)
              {
                  f>>a>>b;
                  v[a]+=b;
              }
           else
              if(ct==1)
                 {f>>a>>b;
                 g<<binsum1(v,a,b)<<'\n';}
              else
                 if(ct==2)
                    {
                        f>>a;sum=0;b=0;
                        binsum2(v,1,n,sum,a,b);
                        if(sum==a)
                           g<<b<<'\n';
                        else
                           g<<-1<<'\n';
                    }
       }
    f.close();g.close();
    return 0;
}