Cod sursa(job #2158264)

Utilizator cristii2000cristiiPanaite Cristian cristii2000cristii Data 10 martie 2018 11:42:52
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>
using namespace std;ifstream in("arbint.in");ofstream out("arbint.out");const int MAXN=100041;int n,m,sir[MAXN],arbint[4*MAXN];void citire(){in>>n>>m;for(int i=1;i<=n;i++)in>>sir[i];}void constructie(int st,int dr,int nod=1){if(st==dr){arbint[nod]=sir[st];return;}int mij=(st+dr)/2;constructie(st,mij,nod<<1);constructie(mij+1,dr,nod<<1|1);arbint[nod]=max(arbint[2*nod],arbint[2*nod+1]);}int query(int qst,int qdr,int st=1,int dr=n,int nod=1){if(qst<=st&&dr<=qdr){return arbint[nod];}int mij=(st+dr)>>1;int maxi=-1;if(mij>=qst)maxi=max(maxi,query(qst,qdr,st,mij,nod<<1));if(qdr>mij)maxi=max(maxi,query(qst,qdr,mij+1,dr,nod<<1|1));return maxi;}void update(int pos,int val,int st=1,int dr=n,int nod=1){if(st==dr)arbint[nod]=val;else{int mij=(st+dr)>>1;if(pos<=mij)update(pos,val,st,mij,nod<<1);else update(pos,val,mij+1,dr,nod<<1|1);arbint[nod]=max(arbint[nod<<1],arbint[nod<<1|1]);}}int main(){citire();constructie(1,n);for(int i=1;i<=m;i++){int op,a,b;in>>op>>a>>b;if(op==0)out<<query(a,b)<<'\n';else{update(a,b);}}return 0;}