Cod sursa(job #1052741)

Utilizator yoloYolo Swag yolo Data 11 decembrie 2013 19:17:50
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include<fstream>
using namespace std;
int n,m,a[400200],val,poz,c,d,maxim;
inline int max(int a,int b) {if(a>b) return a;return b;}
void query(int nod,int left,int right) {
    if(c<=left&&right<=d) {
        if(a[nod]>maxim) maxim=a[nod];
        //maxim=max(maxim,a[nod]);
        return;
        }
    int mij=(left+right)/2;
    if(c<=mij) query(2*nod,left,mij);
    if(d>mij) query(2*nod+1,mij+1,right);
}
void update(int nod,int left,int right) {
    if(left==right) {
        a[nod]=val;
        return;
        }
    int mij=(left+right)/2;
    if(poz<=mij) update(2*nod,left,mij);
    else            update(2*nod+1,mij+1,right);
    a[nod]=max(a[2*nod],a[2*nod+1]);
}
int main() {
    int i,w,x,y;
    ifstream in("arbint.in");
    ofstream out("arbint.out");
    in>>n>>m;
    for(i=0;i<n;i++) {
        in>>val;
        poz=i;
        update(1,0,n-1);
        }
    for(i=0;i<m;i++) {
        in>>w>>x>>y;
        if(w==1) {
            val=y;
            poz=x-1;
            update(1,0,n-1);
            }
        else {
            maxim=-1;
            c=x-1;
            d=y-1;
            query(1,0,n-1);
            out<<maxim<<'\n';
            }
        }
    out.close();
    in.close();
    return 0;
}