Cod sursa(job #936697)

Utilizator dutzulBodnariuc Dan Alexandru dutzul Data 8 aprilie 2013 13:41:24
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
using namespace std;
#define LE 100666
#include <cmath>
ifstream f("arbint.in");ofstream g("arbint.out");
int aa,x,val,n,m,le,i,a[LE],buc[LE],typ,bb;

void update(int pos,int value)
{
  a[pos]=value;
  for(;((pos-1)%le)!=0;pos--);
   buc[pos]=0;
  for(int i=pos;i<=pos+le-1;++i)
    buc[pos]=max(buc[pos],a[i]);
}
int query(int st,int dr)
{
    int result=0;
    for(;st<=dr;)
      if (((st-1)%le==0)&&st+le-1<=dr)
      {
          result=max(result,buc[st]);
          st+=le;
      }
      else
      {
          result=max(result,a[st]);
          ++st;
      }
    return result;
}
int main()
{
    f>>n>>m;
    le=sqrt(n)+1;

    for(i=1;i<=n;++i)
    {
        f>>a[i];
        update(i,a[i]);
    }

    for(i=1;i<=m;++i)
    {
        f>>typ;
        if(typ==0)
        {
          f>>aa>>bb;
          g<<query(aa,bb)<<'\n';
        }
        else
        {
         f>>x>>val;
         update(x,val);
        }
    }

    f.close();g.close();
    return 0;
}