2019年9月5日バランスラインナップ

トピックポータル

* 3ボード

書式#include <iostreamの> 
の#include <cstdioを> 
する#include <CStringの> 
の#include <cmath>
 に#define int型、長い長い
 使って 名前空間はstdを、
INTの N、Q、H [ 500050 ]、DP1 [ 500050 ] [ 65 ]、DP2 [ 500050 ] [ 65 ]。
無効INITを()
{ 
    ためint型 I = 1 DP1を[I] [iが++; iが<= N)0 ] =をH [i]は、
    INT J = 1 ;(1 << J)<= nであり、j ++ のためにint型 iは= 1 ; I +(1 << J) - 1 <= N; iは++ 
            DP1 [I] [J] = MAX(DP1 [I]、[J- 1 ]、DP1を[I +(1 << J- 1)] [J- 1 ])。
    以下のためにint型 i = 1 ; iが<= N; iは++)DP2を[I] [ 0 ] =をH [i]は、
    INTの J = 1 ;(1 << J)<= nであり、j ++ のためのINT I = 1、I +(1 << J) - 1 <= N; iは++ 
            DP2 [I] [J]
}=分(DP2 [i]は[J- 1 ]、DP2 [iが+(1 << J- 1)] [J- 1 ])。
} 
INT MAXNUM(INT L、int型R)
{ 
    int型 K = LOG2(R-L + 1 )。
    戻り MAX(DP1 [L] [K]、DP1 [R-(1 << k)を+ 1 ] [K])。
} 
INT minnum(INT L、INT R)
{ 
    int型 kは= LOG2(R-L + 1 )。
    戻り分(DP2 [L] [K]、DP2 [R-(1 << k)を+ 1 ] [K])。
main()の符号付き
{
    scanf関数(" %のLLDの%のLLD "、&​​N、&Q)。
    以下のためにint型 i = 1 ; iが<= N; iは++)scanf関数を(" %のLLD "、&H [I])。
    その中に(); 
    INT X、Y。
    以下のためにint型 I = 1 ; I <= Q; iは++ 
    { 
        scanf関数(" %のLLDの%のLLD "、およびX&Y)。
        printf(" %LLDする\ n "、MAXNUM(X、Y) - minnum(X、Y))。
    } 
    戻り 0 
}

 

おすすめ

転載: www.cnblogs.com/qxds/p/11468907.html