Pagini recente » Cod sursa (job #1511548) | Cod sursa (job #745046) | bkariglijk | Cod sursa (job #102590) | Cod sursa (job #3201543)
#include <iostream>
#include <algorithm>
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m;
int nrbatog, lunbatog;
const int maxn = 1e5, maxnum = 1e4;
int batog[ maxnum + 1 ], v[maxn + 1];
void build()
{
for( int i = 0; i < n; ++i )
{
batog[ i / lunbatog ] = max( batog[ i / lunbatog ], v[i] );
}
}
void mymax ( int a, int b )
{
int maxx = 0;
int caregrupra_a = a / lunbatog;
for( int i = a; i < (caregrupra_a + 1) * lunbatog && i <= b; ++i )
maxx = max( maxx, v[ i ] );
int caregrupra_b = b / lunbatog;
for( int i = b; i >= caregrupra_b * lunbatog && i >= a; --i )
maxx = max( maxx, v[i] );
for( int i = caregrupra_a + 1; i <= caregrupra_b - 1; ++i )
maxx = max( maxx, batog[ i ] );
g << maxx << '\n';
}
void myupdate( int a, int b )
{
int caregrupa = a / lunbatog;
if( batog[ caregrupa ] <= b )
{
batog[ caregrupa ] = b;
v[a] = b;
}
else
{
v[a] = b;
int maxx = 0;
for( int i = 0; i < lunbatog; ++i )
{
maxx = max( maxx, v[ caregrupa * lunbatog + i ] );
}
batog[ caregrupa ] = maxx;
}
}
int main() {
ios_base::sync_with_stdio(false);
f.tie(nullptr);
g.tie(nullptr);
f >> n >> m;
for( int i = 0; i < n; ++i )
{
f >> v[i];
}
lunbatog = sqrt( maxn );
nrbatog = maxn / lunbatog;
//cout << "lunbatog : " << lunbatog << '\n';
//cout << "nrbatog : " << nrbatog << '\n';
build();
for( int i = 1; i <= m; ++i )
{
int o, a, b;
f >> o >> a >> b;
if( o == 0 )
{
mymax( a - 1, b - 1 );
}
else
{
myupdate( a - 1, b );
}
}
return 0;
}