Cod sursa(job #1041061)

Utilizator hevelebalazshevele balazs hevelebalazs Data 25 noiembrie 2013 14:40:31
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <stdio.h>
#define fr(i,a,b) for(int i=a;i<b;++i)
#define max(a,b) a>b?a:b
#define N 100000
int b[2*N];
int n,m,x,y,z;
int u(int p,int l,int r){
    int c=(l+r)>>1;
    if(r==c){b[p]=z;return 0;}
    (y<=c)?u(p<<1,l,c):u(1+(p<<1),c+1,r);
    b[p]=max(b[p<<1],b[1+(p<<1)]);
    }
int q(int p,int l,int r,int il,int ir){
    if((l==il)&&(r==ir))return b[p];
    int c=(l+r)>>1;
    if(ir<=c)return q(p<<1,l,c,il,ir);
    if(il>c)return q(1+(p<<1),c+1,r,il,ir);
    int a=q(p<<1,l,c,il,c),b=q(1+(p<<1),c+1,r,c+1,ir);
    return max(a,b);
    }
int up(){--y;u(1,0,n-1);}
int qp(){printf("%i\n",q(1,0,n-1,y-1,z-1));}
int main(){
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    scanf("%i%i",&n,&m);
    fr(i,0,n)scanf("%i",&z),y=i+1,up();
    fr(i,0,m) scanf("%i%i%i",&x,&y,&z),x?up():qp();
    return 0;
    }