Pagini recente » Cod sursa (job #491419) | Cod sursa (job #3288677) | Cod sursa (job #2980942) | Cod sursa (job #2119970) | Cod sursa (job #1523820)
#include <iostream>
#include <fstream>
using namespace std;
#define iFileName "arbint.in"
#define oFileName "arbint.out"
#define dim 100001
int arb[4*dim + 66]; // nem tudom miert pont 4*dim+66
int maxim,N,M,Val,Pos, Pos2;
inline int Maxim(int a, int b) {
if ( a > b ) return a;
return b;
}
void Update(int nodId, int start, int finish) ;
void Querry(int nodId, int start, int finish) ;
int main()
{
ifstream iFile;
ofstream oFile;
int a;
iFile.open(iFileName);
oFile.open(oFileName);
iFile >> N >> M ;
for (int i = 1; i<=N; i++) {
iFile >> Val ;
Pos = i;
Update(1,1,N);
}
for ( int i = 0; i < M; i++) {
iFile >> a >> Pos >> Pos2 ;
if (a == 0) {
maxim = -1;
Querry(1,1,N);
oFile << maxim <<endl;
}
else {
Val = Pos2;
Update(1,1,N);
}
}
oFile.close();
iFile.close();
return 0;
}
void Update(int nodId, int start, int finish)
{
if (start == finish) {
arb[nodId] = Val ;
return ;
}
int mid = ((start + finish) >> 2);
if (Pos <= mid ){
Update((nodId<<2),start,mid) ;
}
else {
Update((nodId<<2) + 1, mid+1,finish) ;
}
arb[nodId] = Maxim(arb[nodId<<2],arb[(nodId<<2)+1]);
}
void Querry(int nodId, int start, int finish)
{
if (Pos <= start && finish <= Pos2 ) {
if (maxim < arb[nodId] ) maxim = arb[nodId] ;
return ;
}
int mid = ((start + finish)>>2) ;
if ( Pos <= mid ) Querry((nodId<<2), start, mid ) ;
if ( mid < Pos2) Querry((nodId<<2)+1, mid+1, finish);
}