Cod sursa(job #1306096)

Utilizator BlackBird_v.1.0Stephen Berg BlackBird_v.1.0 Data 30 decembrie 2014 15:32:33
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <bits/stdc++.h>
using namespace std;
#define Nmax 400013

int Stree[Nmax],lazy[Nmax];
int n,i,a,b,c,j,k,l,m,value,op;

void update_tree (int nod, int st,int dr,int x, int y)
{
 if (st>dr || st>y || dr<x) return;
 if (st==dr)
      {
       Stree[nod]=value;
       return;
	  }
 update_tree(nod*2,st,(st+dr)/2,x,y);
 update_tree(nod*2+1,(st+dr)/2+1,dr,x,y);
 Stree[nod]=max(Stree[nod*2],Stree[nod*2+1]);
}

int query(int nod,int st,int dr,int x,int y)
{
 if (st>dr || st>y || dr<x) return -1;
 if (st>=x && dr<=y) return Stree[nod];	  
 return max(query(nod*2,st,(st+dr)/2,x,y),query(nod*2+1,(st+dr)/2+1,dr,x,y));
}


int main(void)
{
 ifstream cin("arbint.in");
 ofstream cout("arbint.out");
 cin>>n>>m;
 for (i=1;i<=n;++i)
  {
   cin>>value;
   update_tree(1,1,n,i,i);
  }
 for (;m>0;--m)
  {
   cin>>op>>a>>value;
   if (op==0) cout<<query(1,1,n,a,value)<<"\n";
   if (op==1) update_tree(1,1,n,a,a);
  }	
 return 0;
}