Cod sursa(job #472369)

Utilizator S7012MYPetru Trimbitas S7012MY Data 24 iulie 2010 12:29:03
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <cstdio>
#include <iostream>
using namespace std;
#define DN 100001

int m,n,arb[4*DN+66],val,poz,rez,ls,ld;

void actualizare(int sursa,int st,int dr) {
    if(st==dr) {arb[sursa]=val; return; }
    int mij=(st+dr)/2;
    if(poz<=mij) actualizare(2*sursa,st,mij);
    else actualizare(2*sursa+1,mij+1,dr);
    arb[sursa]=max(arb[2*sursa],arb[2*sursa+1]);
}

void it(int sursa,int st,int dr) {
    if(ls<=st && dr<=ld) {
        if(rez<arb[sursa]) rez=arb[sursa];
        return;
    }
    int mij=(st+dr)/2;
    if(ls<=mij) it(sursa*2,st,mij);
    else it(sursa*2+1,mij+1,dr);
}

int main()
{
    int i,op,p1,p2;
	freopen("arbint.in","r",stdin);
	freopen("arbint.out","w",stdout);
	scanf("%d %d",&n,&m);
	for(i=1; i<=n; i++) {
	    scanf("%d",&val);
	    poz=i;
	    actualizare(1,1,n);
	}
	for(i=1;i<=m; i++) {
	    scanf("%d %d %d",&op,&p1,&p2);
	    if(!op) {
	        rez=-1;
	        ls=p1,ld=p2;
	        it(1,1,n);
	        printf("%d\n",rez);
	    }
	    else {
	        poz=p1; val=p2;
	        actualizare(1,1,n);
	    }
	}
	return 0;
}