その差に一つの質問は、この問題は範囲染色であることである、染色点が問題、間隔未満1点です
左右の境界、B、B変わらず、右の境界について、左の境界は+ 1に変更することができます
統計間隔の数、それが接続されているかどうかを確認するために、各染色されたレコードの周りの境界線であるので、セクションの番号に接続されていないが+1を染色しました
1つの#include <ビット/ STDC ++。H> 2の#include <iostreamの> 3の#include <CStringの> 4の#include <ベクトル> 5 の#define LSONのL、M、RT << 1 6 の#define rsonのM + 1、R、 RT << 1 | 1 7 の#define MEM(X)のmemset(X、0、はsizeof(x))を 8 使用して 名前空間STDを、 9 のconst int型 MAXN = 8000 + 5 。 10 int型 COL [MAXN << 4 ]。 11 12ベクター<ペア< 整数、整数 >> CNT [MAXN]。 13 int型のn; 14 15 空隙プッシュダウン(int型RT){ 16 であれば(!COL [RT] = - 1 ){ 17 COL [RT << 1 ] = COL [RT << 1 | 1 ] = COL [RT]。 18 COL [RT] = - 1 。 19 } 20 リターン。 21 } 22 空隙更新(int型 L、INT R、INT C、INT L、INT R、INT RT){ 23 もし(L <= 1 && R> = R){ 24 // COUT << "tiao" << RT << " "<< L <<"" << R << ENDL。 25 COL [RT] = C。 26 リターン; 27 } 28 プッシュダウン(RT)。 29 int型 M =(L + R)>> 1 。 30 であれば(L <= m)の更新(L、R、C、LSON)。 31 であれば(R> m)の更新(L、R、C、rson)。 32 } 33 34 35 空隙クエリ(int型 L、int型の R、 37 // COUT << "市" << RT <<」「<< COL [RT] << ENDL。 38 。CNT [COL [RT]一back(make_pair < 整数、整数 > (L、R))。 39 リターン; 40 } 41 であれば(L == R)のリターン; 42 int型 M =(L + R)>> 1 。 43 照会(LSON)。 44 照会(rson)。 45 } 46 47 48 INT メイン(){ 49 ながら(CIN >> N){ 50 MEM(CNT)。 51 のmemset(COL、1、はsizeof (COL))。 52 のためには、(int型 i = 1 ; iが<= N; iが++ ){ 53 int型 A、B、C; scanf関数(" %D%D%D "、&、&B、&C)。 54 // COUT << << " "<< B <<"" << C << ENDL。 55 更新(+ 1、B、C、0、8000、1 )。 56 } 57 クエリ(0、8000、1 )。 58 // coutの<< CNT [0] [0] .second << 59 のために(int型 I = 0 ; iが= < 8000 ; iが++ ){ 60 INT ANS = 0 。 61 であれば(CNT [I] .size())ANS ++ 。 62 のために(INT J = 1 ; J <CNT [I] .size(); J ++ ){ 63 64 であれば(CNT [I] [J] 1次回== CNT [i]は[J- 1 ] .second + 1)続け; 65の ANS ++ ; 66 } 67 CNT [I] .clear(); 68 であれば(ANS)のprintf(" %D%D \ N " 、I、ANS)。 69 } 70 COUT << ENDL。 71 } 72 リターン 0 。 73 }