Cod sursa(job #1308687)

Utilizator SorinmocanuFMI Sorin Mocanu Sorinmocanu Data 4 ianuarie 2015 16:05:20
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>

using namespace std;
#define dim 100001
int n,m, start, finis, poz, val,maxim, maxarb[4*dim+66];
ifstream f1("arbint.in");
ofstream f2("arbint.out");

int max(int a, int b)
    { if (a>b) return a;
      return b;  }

void update(int nod, int st, int dr)
    { if (st==dr)
        { maxarb[nod]=val; return; }
      int mij=(st+dr)/2;
      if (poz<=mij) update(2*nod, st, mij);
          else update(2*nod+1, mij+1, dr);
      maxarb[nod]=max(maxarb[2*nod], maxarb[2*nod+1]); }

void query(int nod, int st, int dr)
    { if ((start<=st) && (dr<=finis))
        { if (maxim<maxarb[nod]) maxim=maxarb[nod]; return; }
      int mij=(st+dr)/2;
      if (start<=mij) query(nod*2,st,mij);
      if (mij<finis)  query(nod*2+1,mij+1,dr); }

int main()
{       int x,a,b,i;
        f1>>n>>m;
        for (i=1; i<=n; i++)
            { f1>>val;
              poz=i;
              update(1,1,n); }
        for (i=1; i<=m;i++)
            { f1>>x>>a>>b;
              if (x==0) { start=a; finis=b; maxim=0;
                          query(1,1,n); f2<<maxim<<"\n"; }
                else { poz=a; val=b; update(1,1,n); } }
        f1.close();
        f2.close();
    return 0;
}