Pagini recente » Profil beer_team | Cod sursa (job #884158) | Cod sursa (job #2757554) | Cod sursa (job #120) | Cod sursa (job #3202218)
// sursa tone alexandru
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int maxn=100005;
const int sqrtmaxn=sqrt(maxn);
int v[maxn], batog[sqrtmaxn];
int n, sqrtn;
void init(int n) {
sqrtn=sqrt(n);
for(int i=0; i<n; i++) {
fin>>v[i];
batog[i/sqrtn]=max(batog[i/sqrtn], v[i]);
}
}
void update(int a, int b) {
int st=a/sqrtn*sqrtn;
int dr=(a/sqrtn+1)*sqrtn;
v[a]=b;
if(batog[a/sqrtn]<v[a])
batog[a/sqrtn]=v[a];
else {
int maxx=0;
for(int i=st; i<n && i<dr; i++)
maxx=max(maxx, v[i]);
batog[a/sqrtn]=maxx;
}
}
int afis(int a, int b) {
//a = 7, st = 9
//b = 7, dr = max(7, 5)
int st=(a/sqrtn+1)*sqrtn;
int dr=max(a, (b/sqrtn)*sqrtn-1);
//cout << "akjsld:" << a << ' ' << b << ' ' << st << ' ' << dr << '\n';
int maxx=0;
for(int i=a; i<st && i<n && i<=b; i++)
maxx=max(maxx, v[i]);
for(int i=dr+1; i<=b; i++)
maxx=max(maxx, v[i]);
for(int i=st; i<=dr; i++)
maxx=max(maxx, batog[i/sqrtn]);
return maxx;
/*for(int i=0;i<n;i++)
cout<<v[i]<<" ";
cout<<'\n';*/
}
int main() {
int q,op,a,b;
fin>>n>>q;
init(n);
for(int i=0; i<q; i++) {
fin>>op>>a>>b;
if(op==1)
update(a-1, b);
else if(op==0)
fout<<afis(a-1, b-1)<<'\n';
}
/*cout<<'\n';
for(int i=0;i<n;i++)
cout<<v[i]<<" ";
cout<<'\n';
for(int i=0;i<=sqrt(n);i++)
cout<<batog[i]<<" ";*/
return 0;
}