Cod sursa(job #284192)

Utilizator ConsstantinTabacu Raul Consstantin Data 21 martie 2009 10:19:47
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<stdio.h>
#define max(a,b) ((a)>(b)?(a):(b))
int v[1000000],i,min,j,k,l,m,n,p,q;

void upd(int p,int q,int poz){
if(p==q){v[poz]=k;return ;}
int m=(p+q)>>1;

if(m<i)upd(m+1,q,poz*2+1);
else
upd(p,m,poz*2);

v[poz]=max(v[2*poz],v[2*poz+1]);


}
void querry(int p,int q,int poz){
if((i<=p)&&(q<=k)){
if(v[poz]>min)min=v[poz];return ;}
int m=(p+q)>>1;

if(p<m)querry(p,m,2*poz);
if(q>m)querry(m+1,q,2*poz+1);

}
int main(){

freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);

scanf("%d %d",&n,&m);

for(i=1;i<=n;i++)
        {scanf("%d",&k);
        upd(1,n,1);
        }
for(j=1;j<=m;j++)
        {scanf("%d %d %d",&l,&i,&k);
        if(l==1)
                upd(1,n,1);

       else
                {min=-1;
                querry(1,n,1);
                printf("%d\n",min);}
        }

return 0;}