luogu P1966は、個別の逆の順序でフェンウィックツリーラインアップに一致します

パス

直感的に、私たちは、AIとできるだけ同じBIを願っています。私たちは、シーケンスはI位にランクし、シーケンスのb私は1つの場所はまだ最高です位にランクされていない、大胆な推測を作ります。そうであることが判明したデータのいくつかのセットを試してみてください

私たちは、タイトル番号を交換しようとしてみましょう。そして、我々は今だけ相対的なランキングを気にするので、元の値は重要ではありません。私たちは、2つの個別の表情の元のシーケンスを入れて1-Nに変わりました。

今では多くの人が同じ順序になるために交換する必要があるか、需要、2 1-Nの列数となります。結論を持っているように見える、我々は別のシーケンスが近くに移動し、2つを変換するように、無傷のまま配列を有し、最良の戦略では、番号は同じです。

それは最高のは何回かそれを交換するために、別のシーケンスにシーケンスを置きますか?私たちは、限り、我々はx回を交換して、シリアル順序になることができるようになり、それがXと逆の順序があると仮定することで、逆の順番を考えます。答えはされていないものの逆の順序で別のシーケンスを求めて、標準を命じたとき、我々は別のシーケンスを持っているのであれば。

標準ケースと配列がマージソート、逆の順序を行うことが不便です。私たちは逆に求める別の方法がありますが、逆はフェンウィックツリーの権利を求めています。スキャンシーケンスを前後には、現在のxのため、木の配列、[X、MAXN]どのように多くの数を参照してください。そして、1つのxのを配置します。この質問は、ちょうど巣の外に、LOC []だけ同じなので、別の逆の権利を追求するための標準的なシーケンスいます。フェンウィックの木のため、それを逆にします。

1の#include <cstdioを>
 2の#include <アルゴリズム>
 3  使用して 名前空間STDを、
4  のconst  int型 MAXN = 110000、MO = 99999997 5  int型のn、[MAXN]、B [MAXN]、TP [MAXN]、LOC [MAXN]、TRE [MAXN]、ANS。
6  INT lowbit(INT X)
 7  {
 8      リターン X& - X。
9  }
 10  INTクエリ(INT X)
 11  {
 12      int型のRES = 0 13      のための(; X; X - = lowbit(X))
 14      {
 15の          RES + = TRE [X]。
16の          RES%= MO。
17      }
 18の     リターンRES。
19  }
 20  空隙追加(INT X)
 21  {
 22      のために(; X <= Nであり、X + = lowbit(x))を 
 23          TRE [X] ++ ;
24  }
 25  のint main()の
 26  {
 27      のscanf(" %d個"、&N)
28      のためにint型 I = 1 iが<= N; iが++ 29      {
 30          のscanf(" %dの"、および[I])が、
31          TP [I] = [I]を、
32      }
 33      ソート(TP + 1、TP + N + 1 )。
34      のためにint型 i = 1 ; iが<= N; iが++ 35          [I] = LOWER_BOUND(TP + 1、TP + N + 1、[I]) - TP。
36      のためには、int型 i = 1 ; iが<= N; I ++37      {
 38          のscanf(" %dの"、&B [I])。
39          TP [I] =のB [i]は、
40      }
 41      ソート(TP + 1、TP + N + 1 )。
42      のためには、int型 I = 1は iが++; iがn = < 43      {
 44          B [I] = LOWER_BOUND(TP + 1、TP + N + 1、[I] B) - TP。
45          LOC [B [I] = I。
46      }
 47      のためにINTi = 1 ; iは= <N; iは++ 48      {
 49の          ANS + =クエリ(N - LOC [[I] + 1 )。
50          ANS%= MO。
51          追加(N - LOC [[I] + 1 )。
52      }
 53      のprintf(" %Dを\ n " 、ANS)。
54      リターン 0 ;
55 }

 

 

おすすめ

転載: www.cnblogs.com/iat14/p/11520215.html