タイトル説明
ひびが入ったルーンワード、小型FFは地面に通じる道を開きました。彼は下に行ったとき、ドア上の古代の人間の活動のいくつかの種類のパターンが刻まれたドアの前で見つかった石が、そこにあります。石門上記の古代のテキストで、「神の神殿」と言います。FF内部の小さな王室の遺産がある必要がありますね。しかし、今の質問は、ドアを開く方法です......
古代の人々は唯一の賢い人は神々の中で最もアクセス可能であることを考える:慎重に検討した後、彼はドアの上のパターンはおそらく言うことがわかりました。しばしば儀式を介して選択された最も知的な人。おそらくそれは儀式を指し、彼の候補者のためのデジタル障害の束を書き留めて、二つの要素隣接配列を入れ替え操作を行うにそれらを許可するように賢明引退しようとしています。そして、交換の最小数を持つ人々は賢明次のシーケンスである元のシーケンスに分類されないようにします。
小型FF nは桁が同じドアを発見しました。そこで彼は、秘密の扉を開くために考えられ、このシーケンスになるための方法を見つけることです最小数必要なシーケンスを低下させません。しかし、小型FFは......ないだろうし、あなたを見つけなければならなかった、と3つの物事は7後に行うことができますを約束し......
入出力フォーマット
入力フォーマット:
最初の整数nを行い、系列長
第二行nは整数、要素のシーケンスを表す各。
出力フォーマット:
整数ANS、即ち、操作の最小数。
サンプル入力と出力
説明
データ1≤n≤10^ 4の30%。
100%にデータ1≤n≤5* 10 ^ 5。
-maxlongint≤A[i]を≤maxlongint。
サンプル説明:シーケンスを起動するには、標的配列は0238であり、3つの動作を行うことができる標的配列2803です。
1.Swap (8,0):2 0 8 3 2.Swap (2,0):0 2 8 3 3.Swap (8,3):0 2 3 8
分析:
一道类似于模板题但又不是模板题的题目???一道较为简单的树状数组题目,但要转换问题。
CODE:
1の#include <cstdioを> 2の#include <CStringの> 3の#include <cmath> 4の#include <iostreamの> 5の#include <アルゴリズム> 6 使って 名前空間STD。 7 のconst int型 M = 1000005 。 8 int型N、[M]、B [M]。 9つの 長い 長いANS; 10 int型リード(){ 11 チャー C = GETCHAR()。INT ANS = 0、F = 1 。 12 一方、(C < ' 0 ' || C>' 9 '){ もし、(C == ' - ')、F = 0、C = GETCHAR();} 13 ながら(C> = ' 0 ' && C <= ' 9 ')ANS =(ANS << 1)+ (ANS << 3)+(C ^ 48)、C = GETCHAR()。 14 であれば(F) 、リターン ANS。返さ〜ANS + 1 ; 15 } 16 空隙マージ(int型 L、INT {r)が 17 であれば(L == r)を返します。 18 INT半ば=(L + R)>> 1 。 19 マージ(L、MID)、マージ(MID + 1 、R)。 20 INT LL = L、RR =ミッド+ 1、TOT = 0 。 21 一方(LL <=ミッド&&のRR <= r)は 22 であれば([LL]> [RR]){ANS + = R-RR + 1、B [++ TOT] [LL ++ = ];} 23 他 B [+を+ TOTは] = [RR ++ ]。 24 一方(LL <= MID)のb [++ TOT]は= [LL ++ ]。 25 一方(RR <= r)はB [++ TOTは] [RR ++ = ]。 26 のための(int型I = 1; iが<= R; iは++)[I] = bの[I-L + 1 ]。 27 リターン; 28 } 29 INT メイン(){ 30 N = 読み取ります()。 31 のために(int型 i = 1 ; iが<= N; iが++)[I] = (読み取り) 32 マージ(1 、N) 33 COUT << ANS。 34 リターン 0 。 35 }