Cod sursa(job #2308409)

Utilizator EdgeLordXDOvidiuPita EdgeLordXD Data 27 decembrie 2018 00:37:12
Problema Arbori de intervale Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include<bits/stdc++.h>
#define N 100005
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int a[N],x,y,mx=0;
void update(int nod, int l, int r){
    if(l==r){
        a[nod]=y;
        return;
    }
    int m=(l+r)/2;
    if(x<=m)
        update(2*nod, l, m);
    else
        update(2*nod+1, m+1 ,r);
    a[nod]=max(a[nod*2],a[nod*2+1]);
}
void ans(int nod, int l, int r){
    if(x<=l && y>=r){
        mx=max(mx,a[nod]);
        return;
    }
    int m=(l+r)/2;
    if(x<=m)
        ans(nod*2, l, m);
    if(y>m)
        ans(nod*2+1, m+1, r);

}
int main(){
	int n,m,c,i;
	in>>n>>m;
	for(i=1; i<=n; ++i){
        in>>y;
        x=i;
        update(1,1,n);
	}
	while(m--){
        in>>c>>x>>y;
        if(!c){
            mx=0;
            ans(1,1,n);
            out<<mx<<"\n";
        }
        else
            update(1,1,n);
	}
	return 0;
}