Pagini recente » Cod sursa (job #2612700) | Cod sursa (job #1612854) | Cod sursa (job #2948317) | Cod sursa (job #2494689) | Cod sursa (job #2620529)
#include <iostream>
#include <fstream>
using namespace std;
#define maxi 100010
int N, M, arbore[4*maxi], val, poz, maxim, x1, y1;
void op_0(int rad, int st, int dr)
{
int mij;
if ( x1 <= st && dr <= y1 )
{
if ( arbore[rad]>=maxim )
maxim = arbore[rad];
return;
}
mij = st+(dr-st)/2;
if ( x1 <= mij )
op_0(2*rad,st,mij);
if ( mij+1 <= y1 )
op_0(2*rad+1,mij+1,dr);
}
void op_1(int rad, int st, int dr)
{
int mij;
if ( st == dr )
{
arbore[rad] = val;
return;
}
mij = (st+dr)/2;
if ( poz <= mij)
op_1(2*rad,st,mij);
else
op_1(2*rad+1,mij+1,dr);
if(arbore[2*rad]>arbore[2*rad+1]) ///tatal este maximul dintre fii sai
arbore[rad]=arbore[2*rad];
else
arbore[rad]=arbore[2*rad+1];
}
int main()
{
int a,b,op;
ifstream f("arbint.in");
ofstream g("arbint.out");
f>>N>>M;
for ( int i = 1; i <= N; i++ )
{
f>>val;
poz=i;
op_1(1,1,N);
}
for ( int operatii=1;operatii<=M;operatii++ )
{
f>>op>>a>>b;
if ( op== 0 )
{
x1=a; y1=b;
maxim =0;
op_0(1,1,N);
g<<maxim<<'\n';
}
else
{
poz =a;
val=b;
op_1(1,1,N);
}
}
}