Pagini recente » Cod sursa (job #1122671) | Cod sursa (job #1583661) | Cod sursa (job #1039882) | Cod sursa (job #1465214) | Cod sursa (job #653066)
Cod sursa(job #653066)
#include <fstream>
#include <iostream>
#define lf (2*n)
#define rt (2*n+1)
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int t[1<<17],x,y,q;
void make(int n,int l,int r){
int m;
if(l==r)t[n]=y;else{
m=(l+r)/2;
if(x<=m)make(lf,l,m);else
make(rt,m+1,r);
t[n]=max(t[lf],t[rt]); }
}
void query(int n,int l,int r){
int m;
if((x<=l)&&(r<=y)){
q=max(q,t[n]);
return; };
m=(l+r)/2;
if(x<=m)query(lf,l,m);
if(m<y)query(rt,m+1,r);
}
int main(){
int i,n,m,o;
f>>n>>m;
for(i=1;i<=n;i++){f>>y;x=i;make(1,1,n);};
for(i=1;i<=m;i++){
f>>o>>x>>y;
if(o)make(1,1,n);else{
q=0;
query(1,1,n);
g<<q<<'\n'; }; };
}