Pagini recente » Cod sursa (job #2022695) | Cod sursa (job #1377047) | Cod sursa (job #97435) | Cod sursa (job #2469045) | Cod sursa (job #828924)
Cod sursa(job #828924)
#include<fstream>
using namespace std;
int v[300000], a, b, c, n, m, i;
ifstream f("arbint.in");
ofstream g("arbint.out");
int max( int a, int b )
{
if ( a > b )
return a;
return b;
}
void adaugare( int st, int dr, int k)
{
int mij, fs, fd;
if ( st == dr )
{
v[k] = a;
return;
}
fs = 2 * k;
fd = fs + 1;
mij = ( st + dr ) / 2;
if (b <= mij)
adaugare( st, mij, 2 * k );
else
adaugare( mij + 1, dr, 2 * k + 1 );
if ( v[fs] > v[fd] )
v[k] = v[fs];
else
v[k] = v[fd];
}
int cautare_maxim(int k, int st, int dr )
{
int fs = 0, fd = 0, mij;
if ( a <= st && dr <= b)
return v[k];
mij = ( st + dr ) / 2;
if ( a <= mij )
fs = cautare_maxim( 2 * k, st, mij );
if ( b > mij )
fd = cautare_maxim( 2 * k + 1, mij + 1, dr );
if ( fs < fd )
return fd;
return fs;
}
int main()
{
f>>n>>m;
for ( i = 1; i <= n; i++)
{
f>>a;
b = i;
adaugare( 1, n, 1 );
}
for ( i = 1; i <= m; i++)
{
f>>c;
if (c==0)
{
f>>a>>b;
g<<cautare_maxim( 1, 1, n )<<"\n";
}
else
{
f>>b>>a;
adaugare( 1, n, 1 );
}
}
return 0;
}