Cod sursa(job #1140919)

Utilizator patrixKovacs Patrik patrix Data 12 martie 2014 13:06:10
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>

using namespace std;
fstream f("arbint.in", ios::in);
fstream g("arbint.out", ios::out);
int n,m,x[500050],uj,poz,a,b,q,w,e,maxi;
int update(int csp,int left,int right)
{
    if (left==right)
    {
        x[csp]=uj;
        return 0;
    }
    int k=(left+right)/2;
    if (poz<=k)
    update(csp*2,left,k);
    else
    update(csp*2+1,k+1,right);
    x[csp]=max(x[csp*2],x[csp*2+1]);
}
int query(int csp,int left,int right)
{
    if (a<=left && b>=right)
    {
        if (x[csp]>maxi)
        maxi=x[csp];
        return 0;
    }
    int k=(left+right)/2;
    if (a<=k)
    query(csp*2,left,k);
    if (b>k)
    query(csp*2+1,k+1,right);
}
int main()
{
    f>>n>>m;
    for (int i=1;i<=n;i++)
    {
        f>>uj;
        poz=i;
        update(1,1,n);
    }
    while (f>>q>>w>>e)
    {
        if (!q)
        {
            maxi=-1;
            a=w;
            b=e;
            query(1,1,n);
            g<<maxi<<"\n";
        }
        else
        {
            poz=w;
            uj=e;
            update(1,1,n);
        }
    }
}