Cod sursa(job #2568347)

Utilizator luisavluisa v luisav Data 3 martie 2020 22:11:00
Problema Arbori de intervale Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <stack>
#include <vector>
#include <algorithm>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int v[2000002];
int val,poz;
void actualizare(int nod,int st,int dr){
if(st==dr)
     {v[nod]=val;
     return;}
else{

    int mij=(st+dr)/2;
    if(poz<=mij)actualizare(nod*2,st,mij);
    else actualizare(nod*2+1,mij+1,dr);

    v[nod]=max(v[2*nod],v[2*nod+1]);

}

}
int a,b,rez;
void interogatie(int nod,int st,int dr){

if(a<=st&&dr<=b){
    if(rez<v[nod])rez=v[nod];

}
else{
    int mij=(st+dr)/2;
    if(a<=mij)interogatie(nod*2,st,mij);
    if(mij<b)interogatie(2*nod+1,mij+1,dr);
}
}
int n,m;
int main()
{
    in>>n>>m;
    for(int i=1;i<=n;i++){
        int x;
        in>>x;
        val=x;
        poz=i;
        actualizare(1,1,n);
    }
    for(int i=1;i<=m;i++){
        int q,x,y;
        in>>q;
        if(q==1)
        {
       in>>poz>>val;
        actualizare(1,1,n);
        }
        if(q==0){
       in>>a>>b;
        rez=-1;
        interogatie(1,1,n);
        out<<rez<<endl;
        }
    }
}