Pagini recente » Cod sursa (job #1477601) | Cod sursa (job #1789130) | Cod sursa (job #50032) | Cod sursa (job #2587752) | Cod sursa (job #178307)
Cod sursa(job #178307)
#include<stdio.h>
#define INPUT "arbint.in"
#define OUTPUT "arbint.out"
#define NMAX 100001
FILE *fin = fopen(INPUT, "r"), *fout = fopen(OUTPUT, "w");
long N, M, X, Y, Maxim;
long A[ NMAX ], Arb[ 5 * NMAX ];
int code;
void readNew()
{
fscanf(fin, "%d %ld %ld", &code, &X, &Y);
}
inline long MAX(long NODE)
{
if(Arb[ 2 * NODE ] > Arb[ 2 * NODE + 1 ])
return Arb[ 2 * NODE];
return Arb[ 2 * NODE + 1];
}
void update(long node, long left, long right)
{
long middle;
if(left == right)
{
Arb[ node ] = Y;
return;
}
middle = (left + right) >> 1;
if(X <= middle)
update(2 * node, left, middle);
else
update(2 * node + 1, middle + 1, right);
Arb[ node ] = MAX( node );
}
void query(long node, long left, long right)
{
long middle;
if(X <= left && right <= Y)
{
if(Maxim < Arb[ node ])
Maxim = Arb[ node ];
return;
}
middle = (left + right) >> 1;
if(middle >= X) query(2 * node, left, middle);
if(middle < Y) query(2 * node + 1, middle + 1, right);
}
void readValues()
{
fscanf(fin, "%ld %ld", &N, &M);
for(long i = 1; i <= N; ++i)
{
fscanf(fin, "%ld", &A[ i ]);
X = i;
Y = A[ i ];
update(1,1,N);
}
}
int main()
{
readValues();
for(long i = 0; i < M; ++i)
{
readNew();
if(code)
update(1, 1, N);
else
{
Maxim = 0;
query(1, 1, N);
fprintf(fout, "%ld\n", Maxim);
}
}
fclose(fin);
fclose(fout);
return 0;
}