Pagini recente » Cod sursa (job #2384958) | Cod sursa (job #2416712) | Cod sursa (job #2058198) | Cod sursa (job #135217) | Cod sursa (job #2396845)
#include <stdio.h>
#include <math.h>
#include <iostream>
#define DIM 100005
using namespace std;
FILE *fin = fopen("arbint.in", "r");
FILE *fout = fopen("arbint.out", "w");
int n,m,SQRT,a[DIM],cerinta,A,B,bucket[620],ans,ibuc,abuc,bbuc,i,j;
int main()
{
fscanf(fin, "%d%d", &n,&m);
SQRT = sqrt(n) +1;
for(i=0; i<n; ++i)
{
fscanf(fin, "%d", &a[i]);
bucket[i/SQRT] = max(bucket[i/SQRT], a[i]);
}
for(i=1; i<=m; ++i)
{
fscanf(fin, "%d%d%d", &cerinta,&A,&B);
--A;
if(cerinta == 1)
if((a[A] != bucket[A/SQRT]) or (a[A] == bucket[A/SQRT] and B>a[A]))
{
a[A] = B;
bucket[A/SQRT] = max(bucket[A/SQRT], B);
}
else
{
a[A] = B;
bucket[A/SQRT] = 0;
ibuc = A/SQRT;
for(j=ibuc*SQRT; j<(ibuc+1)*SQRT; ++j)
bucket[ibuc] = max(bucket[ibuc], a[j]);
}
else //cerinta = 0;
{
--B;
abuc = A/SQRT;
bbuc = B/SQRT;
if(abuc == bbuc)
{
ans = 0;
for(j=A; j<=B; ++j)
ans = max(ans, a[j]);
}
else
{
ans = 0;
for(j=A; j<(abuc+1)*SQRT; ++j)
ans = max(ans, a[j]);
for(j=abuc+1; j<=bbuc-1; ++j)
ans = max(ans, bucket[j]);
for(j=bbuc*SQRT; j<=B; ++j)
ans = max(ans, a[j]);
}
fprintf(fout, "%d\n", ans);
}
}
fclose(fin);
fclose(fout);
return 0;
}