Cod sursa(job #1041080)

Utilizator hevelebalazshevele balazs hevelebalazs Data 25 noiembrie 2013 15:07:51
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 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,M;
int u(int p,int l,int r){
    int c=(l+r)>>1;
    if(l==r){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){
    if(y<=l&&r<=z) {M=max(M,b[p]);return 0;}
    int c=(l+r)>>1;
    if(y<=c) q(p<<1,l,c);
    if(c<z) q(1+(p<<1),c+1,r);
    }
int up(){--y;u(1,0,n-1);}
int qp(){M=-1;--y;--z;q(1,0,n-1);printf("%i\n",M);}
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;
    }