Pagini recente » Cod sursa (job #1108833) | Cod sursa (job #1374977) | Cod sursa (job #1697440) | Monitorul de evaluare | Cod sursa (job #3347531)
#include <iostream>
#include <fstream>
#include <cmath>
#define MAXN 100000
#define MAXSQRT 317
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int bucket[MAXSQRT];
int v[MAXN];
int main()
{
int n, m, bucket_size, st, dr, bst, bdr, i, j, query_type, bucket_nr, primul, ultimul, maximul;
fin>>n>>m;
bucket_size=sqrt(n);
for(i=0;i<n;i++){
fin>>v[i];
bucket_nr=i/bucket_size;
bucket[bucket_nr]=max(bucket[bucket_nr], v[i]);
}
for(i=0;i<m;i++){
fin>>query_type>>st>>dr;
st--;
if(query_type==1){
v[st]=dr;
bucket_nr=st/bucket_size;
bucket[bucket_nr]=0;
primul = bucket_size * bucket_nr;
ultimul = bucket_size * (bucket_nr + 1) - 1;
for(j=primul;j<=ultimul;j++){
bucket[bucket_nr]=max(bucket[bucket_nr], v[j]);
}
}
else{
dr--;
bst=st/bucket_size;
maximul=0;
ultimul=(bst+1)*bucket_size-1;
bdr=dr/bucket_size;
primul=bdr*bucket_size;
if(bst!=bdr){
for(j=st;j<=ultimul;j++){
maximul=max(maximul, v[j]);
}
for(j=primul;j<=dr;j++){
maximul=max(maximul, v[j]);
}
for(j=bst+1;j<bdr;j++){
maximul=max(maximul, bucket[j]);
}
}
else{
for(j=st;j<=dr;j++){
maximul=max(maximul, v[j]);
}
}
fout<<maximul<<'\n';
}
}
return 0;
}