Cod sursa(job #1218171)

Utilizator andreey_047Andrei Maxim andreey_047 Data 9 august 2014 21:03:53
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <cstdio>
#include <algorithm>
#define nmax 100009
using namespace std;
int n,m,maxim;
typedef int Arb;
Arb H[nmax];
void Upgrade(int nod,int st,int dr,int x,int poz){
 if(st == dr){
        H[nod] = x;
    return;
 }
 int mij = (st+dr)/2;
 if(mij >= poz) Upgrade(2*nod,st,mij,x,poz);
 else  Upgrade(2*nod+1,mij+1,dr,x,poz);
 H[nod] = max(H[2*nod],H[2*nod+1]);
}
void Ask(int nod,int st,int dr , int A,int B){
    if(A <= st && dr <= B ) {
            if(maxim < H[nod])
            maxim = H[nod];
    return;}
    int mij = (st+dr)/2;
    if(mij >= A) Ask(2*nod,st,mij,A,B);
    if(mij < B) Ask(2*nod+1,mij+1,dr,A,B);
}
int main(){
    int i,x,cod,y;
  freopen("arbint.in","r",stdin);
  freopen("arbint.out","w",stdout);
  scanf("%d%d",&n,&m);
  for(i=1;i<=n;i++){
    scanf("%d",&x);
    Upgrade(1,1,n,x,i);
  }
  while(m--){
    scanf("%d",&cod);
    scanf("%d%d",&x,&y);
    if(cod == 1)
        Upgrade(1,1,n,y,x);
    else{
            maxim=-1;
            Ask(1,1,n,x,y);
            printf("%d\n",maxim);
  }}
    return 0;
}