Cod sursa(job #941759)

Utilizator alexblackFMI - Dumitrache Alexandru alexblack Data 19 aprilie 2013 18:16:21
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("arbint.in");
ofstream out("arbint.out");
int const N=100000;
int INF=1<<28;
int n,m,poz,val,st,dr,t[N];
int maxi(int x, int y)
{
    if(x>y) return x;
    return y;
}
void add(int p, int a, int b)
{
    if(a==poz && b==poz)
    {t[p]=val;return;}
    int m=(a+b)/2;
    if(poz<=m)  add(p*2,a,m);
    if(poz>m)   add(p*2+1,m+1,b);
    t[p]=maxi(t[2*p],t[2*p+1]);
}
int query(int p,int a, int b)
{
    if(st<=a && b<=dr)  return t[p];
    int m=(a+b)/2;  int r1,r2;
    if(st<=m)r1=query(2*p,a,m);    else r1=-INF;
    if(dr>m) r2=query(2*p+1,m+1,b);else r2=-INF;
    return max(r1,r2);
}
int main()
{
    in>>n>>m;   int x;
    for(poz=1;poz<=n;poz++)
    {in>>val;add(1,1,n);}
    for(int i=1;i<=m;i++)
    {
        in>>x>>st>>dr;
        poz=st; val=dr;
        if(x==0)out<<query(1,1,n)<<"\n";
        if(x==1)add(1,1,n);
    }
    return 0;
}