https://www.luogu.org/problem/P3431
二次元半順序古典的なタイトル、プレフィックス最大下フェンウィックツリーのメンテナンス、DPの考え。
1つ の#defineバグ(X)COUT <<#xが<< << X << ENDL "が" 2 の#define IOのstd :: IOS :: sync_with_stdio(0) 3 の#define ULLのunsigned long長い 4の#include <ビット/ 。STDC ++ H> 5 の#define ITER ::イテレータ 6 の#define PA対<整数、LL> 7 の#define PP対<整数、PA> 8 使って 名前空間 STDを、 9 の#defineは、長い長いっ 10 の#define MK make_pair 11 の#define PB一back 12 の#define SE第 13 の#defineFiの第 14 の#define << 1 O LS 15 の#define RS 0 << 1 | 1つの 16 のconst int型 N = 1E5 + 5 。 17 int型N、M、Q。 18 INT MX = 1E9。 19 頁のP [N]。 20 int型C [N]。 21 INT 低(LL x)から{ 22 リターン X&( - X)。 23 } 24 空隙追加(int型のx、int型のY){ 25 ながら(X <= Q){ 26個の C [X] = MAX(C [x]は、Y); 27 X + = 低い(X)。 28 } 29 } 30 INT QU(INT X){ 31 INT RES = 0 。 32 一方、(X){ 33の RES = MAX(RES、C [X])。 34 のx = (x)は低いです。 35 } 36の リターンRES。 37 } 38 INT [N]。 39 INT メイン(){ 40 IO。 41 CIN >> N >> M >> Q。 42 のための(int型 I =1 ; I <= Q; iは++ ){ 43 CIN >> P [i]は.fi >> P [i]は.se.fi >> P [i]は.se.se。 44 [I] = P [i]は.se.fi。 45 } 46 ソート(A + 1、A + 1 + Q)。 47 INT =ユニークな(+ NA 1、A + 1 + Q)-A- 1 。 48 ソート(P + 1、P + 1 + Q)。 49 LL ANS = P [ 1 ] .se.se。 50 INT X = LOWER_BOUND(A + 1、A + 1 + NA、P [ 1 ] .se.fi) -A; 51 追加(X、ANS)。 52 のためには、(int型、I = 2 ; I <= Q; iは++ ){ 53 、INT X = LOWER_BOUND(A + 1、A + 1 + NA、P [i]は.se.fi) - 。 54の LL RES = QU(X)+ P [i]の.se.se。 55の ANS = MAX(ANS、RES)。 56 (X、RES)を加えます。 57 } 58 のprintf(" %LLDする\ n " 、ANS)。 59 }