Cod sursa(job #1545524)

Utilizator danalex97Dan H Alexandru danalex97 Data 6 decembrie 2015 20:18:30
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <fstream>
using namespace std;
 
ifstream F("arbint.in");
ofstream G("arbint.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);
    }
}