Mai intai trebuie sa te autentifici.
Cod sursa(job #765365)
| Utilizator | Data | 7 iulie 2012 13:06:00 | |
|---|---|---|---|
| Problema | Arbori de intervale | Scor | 50 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.66 kb |
#include<cstdio>
int n,m,y,z,h[275005],x;
int A(int n,int s,int d)
{if(y<=s&&d<=z)
return h[n];
int m=(s+d)/2,u,v;
u=(y<=m)?A(2*n,s,m):0;
v=(z>m)?A(2*n+1,m+1,d):0;
return u<v?v:u;}
void B(int n,int s,int d)
{if(s==d)
{h[n]=z;
return;}
int m=(s+d)/2;
if(y<=m)
B(2*n,s,m);
else
B(2*n+1,m+1,d);
h[n]=h[2*n]<h[2*n+1]?h[2*n+1]:h[2*n];}
int main()
{freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
for(y=1;y<=n;y++)
scanf("%d",&z),B(1,1,n);
while(m--)
{scanf("%d%d%d",&x,&y,&z);
if(!x)
printf("%d\n",A(1,1,n));
else
B(1,1,n);}
return 0;}
