Cod sursa(job #1223103)

Utilizator cojocarugabiReality cojocarugabi Data 25 august 2014 14:43:14
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
# include <fstream>
# include <iostream>
# include <cstring>
# define MAX(a,b) ( (a) > (b) ? (a) : (b) )
using namespace std;
ifstream fi("arbint.in");
ofstream fo("arbint.out");
const int nmax=400005;
int S[nmax],M,x,y;
int read()
{
    char c[30];
    fi>>c;
    int k=strlen(c),p=0;
    for (int i=0;i<k;++i) p=p*10+c[i]-'0';
    return (p);
}
void update(int nod,int p,int u)
{
    if (p==u) S[nod]=y;else
    {
        int m=(p+u)/2;
        if (x<=m) update(2*nod,p,m);
        else  update(2*nod+1,m+1,u);
        S[nod]=MAX(S[2*nod],S[2*nod+1]);
    }
}
void query(int nod,int p,int u)
{
    if (x<=p && u<=y)M=MAX(M,S[nod]);
    else
    {
        int m=(p+u)/2;
        if (x<=m) query(2*nod,p,m);
        if (m <y) query(2*nod+1,m+1,u);
    }
}
int main(void)
{
    int n=read(),
        m=read(),
             x,y;
    for (int i=1;i<=n;++i)
                           x=i,
                      y=read(),
                 update(1,1,n);
    while (m--)
        if (read())
                    x=read(),
                    y=read(),
               update(1,1,n);
        else
                   x=read(),
                   y=read(),
                       M=-1,
               query(1,1,n),
                fo<<M<<"\n";
    fo.close();
    return 0;
}