Pagini recente » Cod sursa (job #3170684) | Cod sursa (job #1658036) | Cod sursa (job #913989) | Cod sursa (job #2315783) | Cod sursa (job #982932)
Cod sursa(job #982932)
#include <fstream>
#include <cstdio>
#include <cctype>
using namespace std;
int mx[1<<19];
int p,x,y;
void insert(int a,int i,int j){
if(i==j){
mx[a]=x;
return;
}
int m=(i+j)>>1;
if(p>m) insert((a<<1)+1,m+1,j);
else insert(a<<1,i,m);
mx[a]=mx[a<<1];
if(mx[(a<<1)+1]>mx[a]) mx[a]=mx[(a<<1)+1];
return;
}
int query(int a,int i,int j){
if(x<=i&&j<=y)
return mx[a];
int m=(i+j)>>1,a1=0,a2=0;
if(x<=m) a1=query(a<<1,i,m);
if(y>m) a2=query((a<<1)+1,m+1,j);
if(a2>a1) a1=a2;
return a1;
}
int main()
{
ifstream f("arbint.in");
FILE *g=fopen("arbint.out","w");
int n,m;
char a[2000010];
f.read(a,2000010);
n=m=0;
int q=0;
while(isdigit(a[q]))
n+=n*9+a[q++]-'0'; q++;
while(isdigit(a[q]))
m+=m*9+a[q++]-'0'; q++;
int x1,y1,cd;
for(int i=1;i<=n;i++){
x1=0;
while(isdigit(a[q]))
x1+=x1*9+a[q++]-'0'; q++;
x=x1,p=i;
insert(1,1,n);
}
for(int t=1;t<=m;t++){
x1=y1=0;
cd=a[q++]-'0'; q++;
while(isdigit(a[q]))
x1+=x1*9+a[q++]-'0'; q++;
while(isdigit(a[q]))
y1+=y1*9+a[q++]-'0'; q++;
if(cd){
x=y1,p=x1;
insert(1,1,n);
}
else{
x=x1,y=y1;
fprintf(g,"%d\n",query(1,1,n));
}
}
return 0;
}