Cod sursa(job #1426082)

Utilizator danalex97Dan H Alexandru danalex97 Data 28 aprilie 2015 22:08:12
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <fstream>
using namespace std;

ifstream F("aint.in");
ofstream G("aint.out");

const int N = 100010;

int n,m;

#define m ((l+r)/2)

int a[N*4];

int go(int n,int l,int r,int k,int p,int t)
{
    return t ? p < l || k > r ? 0 : k <= l && r <= p ? a[n] : max( go(n*2,l,m,k,p,1), go(n*2+1,m+1,r,k,p,1) ) : r < k || k < l ? a[n] : l == r ? a[n] = p : a[n] = max( go(n*2,l,m,k,p,0), go(n*2+1,m+1,r,k,p,0) );
}

#undef m

int main()
{
    F>>n>>m;
    for (int i=1,x;i<=n;++i)
        F>>x, go(1,1,n,i,x,0);
    for (int i=1,t,x,y;i<=m;++i)
    {
        F>>t>>x>>y;
        if ( !t )
            G<<go(1,1,n,x,y,1)<<'\n';
        else
            go(1,1,n,x,y,0);
    }
}