Cod sursa(job #611806)

Utilizator Luncasu_VictorVictor Luncasu Luncasu_Victor Data 3 septembrie 2011 15:47:22
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
#include <iostream>
#define lf (2*n)
#define rt (2*n+1)

using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int t[1<<18],x,y,q;

void make(int n,int l,int r){
    int m;
    if(l==r)t[n]=y;else{
        m=(l+r)/2;
        if(x<=m)make(lf,l,m);else
                make(rt,m+1,r);
        t[n]=max(t[lf],t[rt]); }
}

void query(int n,int l,int r){
    int m;
    if((x<=l)&&(r<=y)){
        q=max(q,t[n]);
        return; };
        m=(l+r)/2;
        if(x<=m)query(lf,l,m);
        if(m<y)query(rt,m+1,r);
}

int main(){
    int i,n,m,o;
    f>>n>>m;
    for(i=1;i<=n;i++){f>>y;x=i;make(1,1,n);};
    for(i=1;i<=m;i++){
        f>>o>>x>>y;
        if(o)make(1,1,n);else{
        q=0;
        query(1,1,n);
        g<<q<<'\n'; }; };
}