Cod sursa(job #2085237)

Utilizator Sergiu1256Ionita Sergiu1256 Data 9 decembrie 2017 20:56:03
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
const int nmax=100001;
int n,m,arb[4*nmax+3],a,b,c,maxi;

void update(int node, int left, int right,int x){
    if(left==right){
        arb[node]=x;
        return;
    }
    int mid=(left+right)/2;
    if(b<=mid)update(2*node,left,mid);
    else update(2*node+1,mid+1,right);
    arb[node]=max(arb[2*node],arb[2*node+1]);
}
 
void querry(int node, int left, int right, int c){
    if(b<=left && right<=c){
        maxi=max(maxi,arb[node]);
        return;
    }
    int mid=(left+right)/2;
    if(b<=mid)querry(2*node,left,mid);
    if(mid<c)querry(2*node+1,mid+1,right);
}
 
int main(){
    fin>>n>>m;
    for(b=1;b<=n;++b){
        fin>>c;
        update(1,1,n,c);
    }
    for(int i=1;i<=m;++i){
        fin>>a>>b>>c;
        if(a)update(1,1,n);
        if(!a){
            maxi=-1;
            querry(1,1,n,c);
            fout<<maxi<<'\n';
        }
    }
    return 0;
}