Cod sursa(job #1288838)

Utilizator refugiatBoni Daniel Stefan refugiat Data 9 decembrie 2014 08:50:46
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
int ar[400086];
int val,poz;
void upd(int nod,int b,int e)
{
    if(b==e)
    {
        ar[nod]=val;
        return;
    }
    int mij=(b+e)/2;
    if(mij>=poz)
        upd(nod*2,b,mij);
    else
        upd(nod*2+1,mij+1,e);
    ar[nod]=max(ar[nod*2],ar[nod*2+1]);
}
int maxx,b,f;
void quest(int nod,int s,int d)
{
    if(s>=b&&d<=f)
    {
        if(maxx<ar[nod])
            maxx=ar[nod];
        return;
    }
    int mij=(s+d)/2;
    if(mij>=b)
        quest(nod*2,s,mij);
    if(f>mij)
        quest(nod*2+1,mij+1,d);
}
int main()
{
    ifstream si;
    si.open("arbint.in");
    ofstream so;
    so.open("arbint.out");
    int n,m;
    si>>n>>m;
    int i;
    for(i=1;i<=n;++i)
    {
        si>>val;
        poz=i;
        upd(1,1,n);
    }
    int a;
    while(m--)
    {
        si>>a;
        if(a==1)
        {
            si>>poz>>val;
            upd(1,1,n);
        }
        else
        {
            si>>b>>f;
            maxx=0;
            quest(1,1,n);
            so<<maxx<<'\n';
        }
    }
}