Pagini recente » Cod sursa (job #2709148) | Cod sursa (job #373148) | Cod sursa (job #2831074) | Cod sursa (job #1358053) | Cod sursa (job #2082376)
#include<bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
vector<int> a;
vector<int> b;
int k;
void update(int i){
b[i/k]=0;
for(int j=(i/k)*k;j<(i/k+1)*k;++j)
if(a[j]>b[i/k]) b[i/k]=a[j];
}
int maxim(int xa,int xb){
int maxx=0;
for(int i=xa;i<=xb;++i){
if(i%k==0 && xb/k>i/k) {
if( b[i/k] > maxx) maxx=b[i/k];
i+=k-1;
}
else
if(a[i]>maxx)maxx=a[i];
}
return maxx;
}
int main(){
int n,m;f>>n>>m;
k=sqrt(n);
int x;
for(int i=0;i<n;++i) {
f>>x;
a.push_back(x);
if(i%k==0) b.push_back(a[i]);
else if(a[i]>b[i/k]) b[i/k]=a[i];
}
bool op;
int xa,xb,maxx=0;
for(int i=1;i<=m;++i){
f>>op>>xa>>xb;
if(op){
a[xa-1]=xb;
update(xa-1);
}
else{
maxx=maxim(xa-1,xb-1);
g<<maxx<<'\n';
}
}
}