Cod sursa(job #1310018)

Utilizator BlackBird_v.1.0Stephen Berg BlackBird_v.1.0 Data 6 ianuarie 2015 12:30:09
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
#define Nmax 4000013
int i,n,m,value,op,a;
int Stree[Nmax];

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

int main(void)
{
 in>>n>>m;
 for (i=1;i<=n;++i)
  {
   in>>value;
   update(1,1,n,i,i);
  }
 while(m--)
  {
   in>>op>>a>>value;
   if (op==0) out<<query(1,1,n,a,value)<<"\n";
   if (op==1) update(1,1,n,a,a);
  }		
 return 0;
}