Pagini recente » Cod sursa (job #3040861) | Cod sursa (job #1334396) | Cod sursa (job #711146) | Cod sursa (job #1276131) | Cod sursa (job #626615)
Cod sursa(job #626615)
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int N=100001;
int n,m,poz[N],aux,maximglobal;//pozitia in arborele de intervale ale int cu un singur element, al i-lea citit
long long v[14*N];
inline long long maxim(long long a,long long b){
return a>b? a: b;
}
inline void BuildTree(int st,int dr,int x){
if(st==dr){
++aux;
in>>v[x];
poz[aux]=x;
return;
}
int m=(st+dr)/2;
BuildTree(st,m,2*x);
BuildTree(m+1,dr,2*x+1);
v[x]=maxim(v[2*x],v[2*x+1]);
}
inline void Question(int st,int dr,int a,int b,int x){
if(st>=a && dr<=b){
if(v[x]>maximglobal)
maximglobal=v[x];
return ;
}
int m=(st+dr)/2;
if(a<=m)
Question(st,m,a,b,2*x);
if(b>m)
Question(m+1,dr,a,b,2*x+1);
}
void UpdateTree(int x){
int aux=v[x],tata;
while(x>=2){
tata=x/2;
v[tata]=maxim(v[2*tata],v[2*tata+1]);
x/=2;
}
}
int main(){
int i,opval,a,b;
in>>n>>m;
BuildTree(1,n,1);
for(i=1;i<=m;i++){
in>>opval>>a>>b;
if(opval==0){
maximglobal=-1;
Question(1,n,a,b,1);
out<<maximglobal<<"\n";
}
else{
v[poz[a]]=b;
UpdateTree(poz[a]);
}
}
return 0;
}