Cod sursa(job #1315347)

Utilizator simaghitaSima Gheorghe Eugen simaghita Data 12 ianuarie 2015 19:08:07
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include<fstream>
#include<algorithm>
#define Nmax 1<<18
using namespace std;
int n,m, a[Nmax];
int poz,maxim,val,X,Y;

void modif(int nod, int st, int dr)
{
    if(st==dr)
    {
        a[nod]=val;
        return ;
    }
    int mij=(st+dr)/2;
    if(poz<=mij)
        modif((nod*2),st,mij);
    else
        modif((nod*2)+1,mij+1,dr);
    a[nod]=max(a[(nod*2)],a[(nod*2)+1]);

}
void query(int nod,int st,int dr)
{
    if(X<=st && dr<=Y)
    {
        if(a[nod]>maxim)
            maxim=a[nod];
        return ;
    }
    int mij=(st+dr)/2;
    if(X<=mij)
        query((nod*2),st,mij);
    if(mij<Y)
        query((nod*2)+1,mij+1,dr);
}
int main()
{
    int x,y,op;
    ifstream fin("arbint.in");
    ofstream fout("arbint.out");

    fin>>n>>m;
    for(int i=1;i<=n;++i)
    {
        fin>>val;
        poz=i;
        modif(1,1,n);
    }

    for(int i=1;i<=m;i++)
    {
        fin>>op>>x>>y;
        if(op==0)
        {
            maxim=-1;
            X=x;Y=y;
            query(1,1,n);
            fout<<maxim<<"\n";
        }
        else
        {
            poz=x;
            val=y;
            modif(1,1,n);
        }
    }
    return 0;
}