Cod sursa(job #2171704)

Utilizator CozehNita Horia Teodor Cozeh Data 15 martie 2018 13:14:38
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
using namespace std;

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

int aint[4*(int)1e5];

void u(int nod, int st, int dr, int numar,int pos){
    int mij;
    if(st == dr) aint[nod] = numar;
    else{
        mij = (st+dr)/2;
        if(pos <= mij) u(2*nod, st, mij, numar, pos);
        else u(2*nod+1, mij+1, dr, numar, pos);
        aint[nod] = max(aint[2*nod],aint[2*nod+1]);
    }
}

int q(int nod, int st, int dr, int p1, int p2){
    int mij;
    if(p1 == st && p2 == dr) return aint[nod];
    else{
        mij = (st+dr)/2;
        if(p2 <= mij) return q(2*nod,st,mij,p1,p2);
        else if(p1 > mij) return q(2*nod+1,mij+1,dr,p1,p2);
        else return max(q(2*nod,st,mij,p1,mij),q(2*nod+1,mij+1,dr,mij+1,p2));
    }
}

int main(){
    int n,m,i,x,y,j,nr;
    f>>n>>m;
    for(i = 1; i <= n; i++){
        f>>nr;
        u(1,1,n,nr,i);
    }
    for(i = 1; i <= m; i++){
        f>>j>>x>>y;
        if(!j)g<<q(1,1,n,x,y)<<"\n";
        else u(1,1,n,y,x);
    }

}