Pagini recente » Cod sursa (job #2547718) | Cod sursa (job #2230154) | Cod sursa (job #520010) | Cod sursa (job #1279197) | Cod sursa (job #3339811)
#include <stdio.h>
#include <stdlib.h>
#define NMAX 100000
#define BATOG_SIZE 320
int vec[NMAX + 1];
int maxi_batog[BATOG_SIZE];
int num_elem;
FILE *fout;
int max( int a, int b ) {
return (a > b) ? a : b;
}
void Maxim( int stanga, int dreapta ) {
int maxi, batog_st, batog_dr, ind;
maxi = 0;
batog_st = stanga / BATOG_SIZE;
batog_dr = dreapta / BATOG_SIZE;
for ( ind = batog_st + 1; ind < batog_dr; ind++ )
maxi = max( maxi, maxi_batog[ind] );
for ( ind = stanga; ind < ( batog_st + 1 ) * BATOG_SIZE && ind <= dreapta; ind++ )
maxi = max( maxi, vec[ind] );
for ( ind = batog_dr * BATOG_SIZE; ind <= dreapta; ind++ )
if ( ind >= stanga )
maxi = max( maxi, vec[ind] );
fprintf( fout, "%d\n", maxi );
}
void Schimb( int poz, int val_noua ) {
int batog, ind;
vec[poz] = val_noua;
batog = poz / BATOG_SIZE;
maxi_batog[batog] = 0;
for ( ind = batog * BATOG_SIZE; ind < (batog + 1) * BATOG_SIZE && ind < num_elem; ind++ )
maxi_batog[batog] = max( maxi_batog[batog], vec[ind] );
}
int main()
{
FILE *fin;
int num_op, ind, tip, op, dreapta, stanga, batog;
fin = fopen( "arbint.in", "r" );
fscanf( fin, "%d%d", &num_elem, &num_op );
for ( ind = 0; ind < num_elem; ind++ ) {
fscanf( fin, "%d", &vec[ind] );
batog = ind / BATOG_SIZE;
maxi_batog[batog] = max( maxi_batog[batog], vec[ind] );
}
fout = fopen( "arbint.out", "w" );
for ( op = 0; op < num_op; op++ ) {
fscanf( fin, "%d%d%d", &tip, &stanga, &dreapta );
stanga--;
dreapta--;
if ( tip == 0 )
Maxim( stanga, dreapta );
else
Schimb( stanga, dreapta + 1 );
}
fclose( fin );
fclose( fout );
return 0;
}