Pagini recente » *PAGINA LUI VI$$U* | Cod sursa (job #703949) | Cod sursa (job #3293166) | Istoria paginii planificare/sedinta-20091023 | Cod sursa (job #3202215)
// 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 = 2, st = 3
//b = 6, dr = 5
int st=(a/sqrtn+1)*sqrtn;
int dr=(b/sqrtn)*sqrtn-1;
//cout << "akjsld:" << a << ' ' << b << ' ' << st << ' ' << dr << '\n';
int maxx=0;
for(int i=a; i<st && i<n; 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;
}