SubpermutationsのCodeforces 1175Fザ・ナンバー

Subpermutationsの数

多くの考えを感じて実現可能な解決策、そして無謀な暴力(FSTと逃げる私はこのブログの脱出を削除

#include <ビット/ STDC ++。H>
 の#defineは LL長い長
 の#define LD長い二
 の#define ULL符号なし長い長
 の#define第Fiの
 に#define SE第二
 の#define MK make_pair
 の#define PLL対<LL、LL>
 の#define PLI対<LL、整数>
 の#define PII対<整数、整数>
 の#define SZ(X)((INT)x.size())
 の#define ALL(X)(X).begin()、(X).END( )
 の#define FIOイオス:: sync_with_stdio(偽); cin.tie(0)。使用して名前空間はstdを、CONSTのINT N = 5E5 + 7 const int型

 

  INF = 0x3f3f3f3f constの LL INF = 0x3f3f3f3f3f3f3f3f const  int型のmod = 998244353 ;
constの ダブル EPS = 1E- 8 ;
CONST  ダブル PI = ACOS( - 1 )。

テンプレート < クラス T、クラス S>インラインボイド追加(T&、S b)は{A + B =。もし(A> = MOD)A - = MOD;} 
テンプレート < クラス T、クラス S>インラインボイドサブ(T&、S b)は、{ - = B。もし(<0)、A + = MOD;} 
テンプレート < クラス T、クラス S>インラインBOOL chkmax(T&、S B)は{ 返す <bは?= B、;} 
テンプレート < クラス T、クラス S>インラインブール chkmin(T&、S b)は{ 返す > bは?A = B、;} 

int型nは、[N]。
INT maxPos [N]。
int型マップ[N]; 

int型ログ[N];
構造体ST {
     INT DP [N] [ 20]; int型のTY;
    ボイド(ビルド整数 nは、INT B []、INT {_Ty)
        TY = _Ty。
        以下のためにint型 = Iを- (ログ[ 0 ] = - 1); iがNを<; I ++の
        ログ[I] =ログイン[I - 1 ] +((I&(iは- 1))== 0 )。
        以下のためにint型 iは= 1 ; iは= <N; iは++)DP [I] [ 0 ] = TYの*のBを[I]。
        以下のためのint型 J = 1; J <=ログイン[N]。J ++ のためにint型 = Iを1、I +(1 << J) - 1 <= N; iは++ 
                DP [I] [J] = MAX(DP [I]、[J- 1 ]、DP [iが+(1 < <(J- 1))] [J- 1 ])。
    } 
    インラインLLクエリ(int型のx、int型のY){
         int型 K =ログイン[Y - X + 1 ]。
        戻り TY * MAX(DP [X] [K]、DP [Y-(1 << K)+ 1 ] [K])。
    } 
} RMQ。

INT {main()の
    scanf関数(" %のD "、&N)
    以下のためにint型私= 1 ; iが<= N; iが++)のscanf(" %dの"、および[I])。
    rmq.build(nは、1 )。
    INT canGo = N。
    以下のためにint型 I = N; I> = 1 ; i-- ){
         場合(地図[I])chkmin(canGoマップ[I]] - 1 )。
        地図[[I]] = I; 
        maxPos [I] = canGo。
    } 
    LL ANS = 0にとって;
     ;int型 i = 1 ; iがn = <; iは++ ){
         int型今= I。
        一方、(今<= maxPos [I]){
             場合(rmq.query(I、今)==今- I + 1 ){ 
                ANS ++  ++ ; 
            } {  =私は(今)rmq.query + - 1 
            } 
        } 
    } 
    のprintf(" %LLDする\ n " 、ANS)。
    リターン 0
} 

/ * 
* /

 

おすすめ

転載: www.cnblogs.com/CJLHY/p/10982816.html