タイトル説明
失われた時間は、時計の周りになることはありません!
Yeliangチェンは、彼の人生は無限に長いと考えている、と日々進行します。
人生Yeliang陳の最初の日、彼は一点を評価する能力を持っています。翌日、2点があります。N番目の日、n点があります。S [i]は=私はあります
いたずら少ししかし、タイムマシンを使用し、X-Y曜日と彼に言われた、あなたは一日のいずれかの能力値を入れ替えることができます。即ち、S [X] < - > S [Y]
このゲームはプレイする小さな遊び、最終的に疲れました。
Yeliang陳:あなたは私を待って小さな、私はあなたの生活の死を作る方法の100種類を持っています。あなたは1秒以内にどのように多くのペア伝えることができない限り、「例外にします。」換言すれば、能力は、ペアの2日x個、Y、X <Yが、S [X]の値に機能> S [Y]を値のシーケンスが続きますか?
小A:私はとても緊張ああです。
だから私はあなたを見つけます。
入出力フォーマット
入力フォーマット:最初の行の整数k、何回小さな遊びAタイムマシンを示しています
次のk行、X_I、Y_Iは、SとS [X_I]交換を示している[Y_I]
出力フォーマット:どのように多くの「例外に」
サンプル入力と出力
説明
サンプル説明
123 456から始まります...
その後、143256 ...
その後、243156 ...
マッチングペアがある[14] [23] [24] [34]
データの30%、X_I、Y_I <= 2000
データの70%、X_Iため、Y_I <= 100000
データの100%に、x_i.y_i <= 2 ^ 31-1 K <= 100000
6024
ソリューション:微妙な嘘を理解するためには、ラフ紙の上に、主に、独自のシミュレーション以上の方法を、ステレオタイプ!
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 typedefの長い 長いLL。 const int型 MAXN = 100010 ; INTハッシュ[MAXN << 1 ]、C [MAXN << 1 ]、LSH [MAXN << 1 ]。 INT CNT、上面、N、M。 対 < INT、INT > P [MAXN]。 INT lowbit(INT X){ 戻り X& - X;} ボイド更新(int型のx、int型V) { ため(INTI = xで、I <= M; iは+ = lowbit(I)) C [I] + = V。 } LL和(INT X) { LL ANS = 0 。 用(int型 ; I> = I = xを1、I- = lowbit(I)) ANS + = C [i]は、 戻るANSを。 } int型のmain() { int型K。 cinを >> K; 以下のために(int型 i = 1 ; iは= Kを<; iは++ ){ CIN >> P [i]が1次回>> P [i]は.second。 ハッシュ[CNT ++] = P [I] 1次回; ハッシュ[ ++ CNT] = P [I] .second; // 最初の配列は、重複排除を選別した後、ハッシュを配置している } (ハッシュソート + 。1、ハッシュ+ 1 + CNT); M = UNIQUE(ハッシュ+ 。1、ハッシュ+ 1 + CNT)-Hash- 1。; のための(INT I = 1 ; I <= M、Iが++)LSH [I] = I; // 元の状態を記録 するために(int型 I = 1 ; Iは= Kを<; Iは++ ){ int型 POS1 = LOWER_BOUND(ハッシュ+ 1、ハッシュ+ 1 + M、P [I] 1次回) - ハッシュ。 INT POS2 = LOWER_BOUND(ハッシュ+ 。1、ハッシュ+ 1 + M、P [I] .second) - ハッシュ; スワップ(LSH [POS1]、LSH [POS2]); // 操作を対応する対応位置を見つける } LL ANS = 0 。 用(INT I = M、I> = 1 ; i-- ){ ANS + = SUM(LSH [I] - 1。); // 逆上の一点を求める (LSH [I]、更新する。1); // 更新一点 LL = LENハッシュ[I] -hash [I- 1 ] - 1 ; //は、連続的なインターバル長見つける ANS + = * lenのSUM(I- 。1)。// Iこの数として考えることができ、連続不変のセクション、! IF(I =!1)アップデート(I- 1、LEN); // 最後に更新されない(lowbit 0が0であるため、更新サイクルで更新されていないが、死んでしまう) } coutの << ANS << てendl ; 戻り 0 ; }