ポータル
問題解決のためのアイデア
それは需要間隔の異なる種類の数があるので、我々はフェンウィックツリー使用しているため(そして一見無しの直接の接触を)
(...表現します)
またはSと、オリジナルと同じ[I] [I-lowbit(I)]の種類の数を表すために... [I]です。
重鎖と同様の動作であるので、アレイは約レコードがあるので、[i]はiは、シェルが最初に発生数、各時間Sが[i]がある]の更新結果を表し; - Sを[ I] ++;ている[I] = I。
しかし、私たちは一つのセクションは、お問い合わせは、B-3は、B-7が登場している。このシェルで... B、次の間隔... B-5、およびX(<B-7をされたと仮定していることを考えます<B-5 <B-3 <b)に、 我々はA ... S [B-7]とき、Bということを求めている- ;答えはエラーになりますときに(あまり... B-5を頼みますa)に忘れます。(説明は、それを理解し、感情的な明確ではありません)
そこでここでは、アクションを使用- オフライン、オフラインいわゆる、ワンタイムの問題は、(問題解決を促進するために)並べ替えるために、特定の順序に従って、すべて入力され、その後、元の順序に従って解答出力を保存します。
どのようにオフラインのアプリケーションはありますか?我々格納された構造データを使用することができ、各可変構造がキーワードで再度ソートのすべての値を読んだ後、別のシリアル番号が格納され、格納された値を有し、キーワード数前者によれば、その後、ソート再び答える出力するので、その目的。
例えば、質問:
1 構造体QUES { 2 のint L、R&LT、ANS、ID; 3 } Q [MAXN]; 4 BOOL CMP1(QUES A、QUES B){ 5。 復帰のAr < BR; 6 } 。7 BOOL CMP2(QUES A、QUES B) { 8。 リターン a.id < b.id; 9 } 10 INT メイン(){ 11 // データを読み出す 12は ソート(Qの+ 1、M + Q + 1、CMP1); //は、第一ソート渡す 13れる // 得答え 14 ソート(Q +を。1、M + Q +。1、CMP2); // 第二通過ソート 15 // 出力回答 16 リターン 0 ; 17 }
ACコード
1の#include <iostreamの> 2の#include <アルゴリズム> 3の#include <cstdioを> 4 使って 名前空間STD。 5 のconst int型 MAXN = 500005 ; 6 INT S [MAXN]、N [MAXN]、M。 7 INTが ある [* MAXN 2 ]。 8インラインINT lowbit(INT X){ 9 リターン X&( - X)。 10 } 11 空隙インサート(int型 ID、int型K){ 12 のために(int型 I = ID; I <= N。I + = lowbit(I)){ 13の S [I] + = K。 14 } 15 } 16 INTクエリ(INT ID){ 17 のintのRES = 0 。 18 のためには、(int型 I = IDを、I> 0 ; I- = lowbit(I)){ 19の RES + =のS [i]は、 20 } 21の リターンRES。 22 } 23 構造体QUES { 24 のint L、R、ANS、ID。 25 } Q [MAXN]。 26 ブールCMP1は(QUES、QUES B){ 27 リターン AR < BR。 28 } 29 ブールCMP2は(QUES、QUES B){ 30 リターン a.id < b.id。 31 } 32 INT メイン(){ 33 CIN >> N。 34 int型 CNT = 1 。 35 のために(int型 i = 1 ; iが<= N; iが++ ){ 36 のscanf(" %dの"、および[I])。 37 } 38 CIN >> M。 39 のために(int型 I = 1 ; I <= M; iが++ ){ 40 のscanf(" %D%dの"、&Q [i]は.L&Q [I] .R)。 41 Q [i]は.ID = I。 42 } 43 ソート(Q + 1、Q + M + 1 、CMP1)。 44 のために(int型 i = 1 ; iが<= N iが++ ){ 45 であれば(されている[[I]]){ 46 インサートは(ある - [[I]、1 ;) 47 } 48 挿入(I、1 )。 49 である [I] = I。 50 一方(Q [CNT] .R == I && CNT <= M){ 51 Q [CNT] .ans =クエリ(Q [CNT] .R)-query(Q [CNT] .l- 1 )。 52 CNT ++ ; 53 } 54 } 55 ソート(Q + 1、Q + M + 1 、CMP2)。 56 のために(int型 I = 1 ; I <= M Iは++ ){ 57 のprintf(" %d個の\ n " 、Q [i]の.ans)。 58 } 59 リターン 0 ; 60 }