Cod sursa(job #1301597)

Utilizator RaileanuCristian Raileanu Raileanu Data 26 decembrie 2014 10:33:56
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
#include<graphics.h>
using namespace std;
#define MX 100002

ifstream f1("arbint.in");
ofstream f2("arbint.out");

int n,m,o,a,b,i,c[MX],maxarb[MX*3];

void update(int nod,int st, int dr)
{   if (st>=dr ) {maxarb[nod]=b; return; };

    int m= (st+dr)/2;
    if (a<=m ) update(nod*2,st,m);
    else update(nod*2+1,m+1,dr);
    maxarb[nod]=max(maxarb[2*nod],maxarb[2*nod+1] );
}

int query(int nod,int st, int dr)
{   if (a<=st && b>=dr ) return(maxarb[nod]);

    int m=(st+dr)/2, mx=0;
    if (a<=m ) mx=max(mx, query(nod*2,st,m) );
    if (b>m) mx=max(mx,query(nod*2+1,m+1,dr) );
    return mx;
}

int main()
{
    f1>>n>>m;
    for (a=1;a<=n;a++)
        {f1>>b;
         update(1,1,n); }

    for (i=1; i<=m;i++)
    {   f1>>o>>a>>b;
        if (!o) f2<<query(1,1,n)<<"\n";
            else update(1,1,n);
    }
    f1.close();
    f2.close();
    return 0;
}