質問の意味:
アレイ構成は、特定の条件を満たし:
1。
1 LR:範囲AI <内にlr(I + 1)=
2。
範囲内のLR LR 0は、(i + 1)>があり愛
アイデア:
最後に見た各非増加範囲は、範囲内の単位で、完全ではないまず、インクリメンタル位置マークの、非増加の範囲がよく増分の範囲内にある場合には、明らかに構築することは不可能である、または構築することができます
質問があります:
そのような増分範囲である1-2、3-4、2-3、この点を解決するために、決意2-3 1-4 1-4は、実際には2つの増分の範囲である範囲内であろう、非増分であります質問、我々は最初の位置の増分の範囲をマークしていない、その範囲の増分は2-2、4-4で、1-4のマークは非増加範囲を確認し、2つの単位の範囲を区別することができ、それはまた、最初は無視しますの位置を確認します
1の#include <cstdioを> 2の#include <iostreamの> 3の#include < ストリング > 4の#include <キュー> 5の#include <CStringの> 6の#include <cmath> 7の#include <アルゴリズム> 8 使って 名前空間STD。 9 typedefの長い 長いLL。 10 typedefの符号なしの長い 長いULL。 11 typedefの長い ダブルLD; 12のtypedef対< INT、INT > PII。 13 #define MEM(X、N)のmemset(X、N) 14 の#define FOR(iは、、B)(I =(A)がINT iが++; iが=(B)<)のための 15 の#defineを PB一back 16 の#define最初F 17 の#defineの第 18 の#define LB LOWER_BOUND 19 の#define UB UPPER_BOUND 20 LL GCD(LL A、LL b)は{ 戻り Bの== 0?A:GCD(B、%のB);} 21 空隙 fast_io(){ios_base :: sync_with_stdio(0)。cin.tie(0 );} 22 CONSTの LDのPI = 4 *のATAN((LD)1 ); 23 のconst int型 INF = 0x3f3f3f3f 。 24 ///////////////////////////////////////////////// /////////// 25 のconst int型 MAXN = 1E5。 26 BOOL VIS [ 1010 ]。 27 int型 N、M、D [ 1005 ] [ 2 ]。 28 ボイドのinit(){ 29 CIN >> N >> M。 30 のmemset(VIS、0、1010 )。 31 } 32 33 int型のmain(){ 34 INIT(); 35 int型 CNT = 0 ; 36 ながら(M-- ){ 37 [ int型T、Lは、R 38は CIN >> T >> L >> R&LT; 39 IF (T) 40 のmemset(VIS + L + 。1、1、RL)である; // 。タグの範囲の増分、有料より注目フロント1 41であり、 他は 42れる D [CNT]が[ 0 ] Lが= D [CNT ++] [ 1 ] = R&LT; // レコード非増加の範囲 43である } 44れる FOR (I、0、CNT- 1)//チェック各非増加範囲は、増分範囲内である 45 { 46が INTフラグ=で0 ; 47 用(INT J = D [I] [ 0 ] + 1。 ; J <= D [I] [ 1 ]; J ++)// そのフロント+ 1、最初の位置を無視注 48 { 49 IF(!VIS [J]を){ // ポイントは範囲がある場合、この構成は、ポイントの前のポイント未満である場合、私に聞かせてインクリメントされない 50 フラグに= 1 、 51である BREAK ; 52である } 53である } 54れる IF(フラグに!)// インクリメンタル出力の範囲NOのすべての点 55 { 56 COUT << " NO \ n " 。 57 リターン 0 ; 58 } 59 } 60 COUT << " YES \ n " 。 61 INT S = N + 3 。 62 (I、FOR 1 、N) 63 { 64 であれば(VIS [i])とCOUT << S <<(I == N?"" :" ")。// 递增范围全部一样 65 他 coutの<< -S-<<(I == nは?"" : ); // nonincrementing範囲、立ち下がり出力 66 } 67 COUT << ENDL; 68 リターン 0 ; 69 }