Pagini recente » Cod sursa (job #226569) | Cod sursa (job #936679) | Cod sursa (job #3168429) | Cod sursa (job #1387911) | Cod sursa (job #2816567)
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <cmath>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int MAXN = 100000;
const int MAXI = 316;
const int MAXB = ( MAXN + MAXI - 1 ) / MAXI;
int batog[MAXB];
int v[MAXN + 1];
int size_v;
void changeBatog( int poz, int val ){
int interval, i;
v[poz] = val;
for( i = interval * MAXI; i < (interval + 1) * MAXI; i++)
batog[interval] = max( v[i], batog[interval]);
}
int query( int left, int right ){
int intervalLeft, intervalRight;
int maxim;
intervalLeft = ( left + MAXI ) / MAXI * MAXI;
intervalRight = right / MAXI * MAXI;
maxim = -1;
while( left < right && intervalLeft >= left ){
maxim = max(v[left], maxim);
left++;
}
while( right >= left && intervalRight <= right ){
maxim = max(v[right], maxim);
right--;
}
intervalLeft /= MAXI;
intervalRight /= MAXI;
while( intervalLeft <= intervalRight ){
maxim = max( maxim, batog[intervalLeft]);
intervalLeft++;
}
return maxim;
}
int main(){
int n, m, i, c, a, b;
in>>n>>m;
for(i = 1; i <= n; i++ ){
in>>v[i];
batog[i % MAXI] = max( v[i], batog[i % MAXI]);
}
for(i = 0; i < m; i++ ){
in>>c>>a>>b;
if( c == 0 )
out<<query(a, b)<<'\n';
else
changeBatog(a, b);
}
return 0;
}