Pagini recente » Cod sursa (job #1506561) | Cod sursa (job #125212) | Cod sursa (job #958058) | Cod sursa (job #743170) | Cod sursa (job #1768398)
#include <stdio.h>
#define LIM 131072
#include <ctype.h>
//solutia cu parsare
using namespace std;
FILE *fi;
int copac[400000], a, b, poz=LIM;
char BUF[LIM];
char getChar(){
poz++;
if(poz>=LIM){
fread(BUF,1,LIM,fi);
poz=0;
}
return BUF[poz];
}
int getNr(){
int r=0, semn=1;
char ch=getChar();
if(ch=='-'){
semn=-1;
ch=getChar();
}
while(isdigit(ch)!=0){
r=r*10+semn*(ch-'0');
ch=getChar();
}
return r;
}
int max(int a, int b){
if(a<b)
return b;
return a;
}
void add(int nod, int st, int dr){
if(st==dr && st==a){
copac[nod]=b;
return;
}
int div=(dr+st)/2;
if(a<=div)
add(2*nod,st,div);
else
add(2*nod+1,div+1,dr);
copac[nod]=max(copac[2*nod+1],copac[2*nod]);
}
int query(int nod, int st, int dr){
if(a<=st && dr<=b)
return copac[nod];
int rez=0, div=dr+st;
div/=2;
if(a<=div)
rez=query(2*nod,st,div);
if(b>div)
rez=max(rez,query(2*nod+1,div+1,dr));
return rez;
}
int main()
{
int n, m, i, c;
fi=fopen("arbint.in", "r");
FILE *fo=fopen("arbint.out", "w");
n=getNr();
m=getNr();
for(i=1;i<=n;i++){
b=getNr();
a=i;
add(1,1,n);
}
for(i=1;i<=m;i++){
c=getNr(); a=getNr(); b=getNr();
if(c==0)
fprintf(fo, "%d\n", query(1,1,n));
else
add(1,1,n);
}
fclose(fi);
fclose(fo);
return 0;
}