問題への羅区P1816・ロイヤルティ・ソリューション
タイトル説明
サーバントはスマートでできる人です。彼は明確に自分のアカウントを作成するために、完全な金持ち、金持ちとして10年間働きました。要件は、執事のk回の1日アカウント、スマートで有能な執事、家政婦を覚えているので、常に豊富に満足します。しかし、いくつかの挑発に、金持ちや家政婦は疑問を持っていました。口座番号Bへ:だから彼は時々、...、それぞれ数1、2によると、忠実な執事に彼の口座を決定するために、特別なメソッドを使用して、家政婦の問題を依頼することを決め、問題は、そのようなことです最小合計は何ですか?家政婦は、彼は常にfalse問題だった回以上を依頼する時間を持っていなかったようにするために。
入出力フォーマット
入力フォーマット:
最初の行は、2つの入力数mを有し、nはM(M <= 100000)Tのアカウントを発現し、問題がn個有し、Nを表し、n <= 100000。
それぞれ二行数m、マネー口座数
N、N後列は問題があり、各ラインは、二つの図は、アカウント数の終わりの始まりを示しています。
出力フォーマット:
各質問への回答の出力ファイル。具体的な例を見ます。
サンプル入力と出力
解像度:
最小要件の対象範囲を見て、ヘクタール、それは最小セグメントツリーのメンテナンス間隔でなければなりません。
最小間隔、セグメントツリー・ボード上の少しの変化を追求するために、セグメントツリーを依存しています。
最小の和のための間隔の範囲の代わりに、その後、終了されるだろう、お願いします。。
1つの#include <ビット/ STDC ++ H> 2 の#define最大500009 3の#include <両端キュー> 4 INT [最大]、N、M。 5 構造体ツリー 6 { 7 のint L、R、分。 8 } T [最大]。 9 ボイドビルド(int型のx、int型の L、INT R) 10 { 11 T [X] .L = 1; T [X] .R = R。 12 であれば(L == R){ 13 T [X] .min = A [L]。 14 リターン; 15 } 16 INT半ば=(L + R)/ 2 。 17 ビルド(X * 2、L、MID);ビルド(X * 2 + 1、中間+ 1 、R)。 18 T [X] .min = STD ::分(T [X * 2 ] .min、T [X * 2 + 1 ] .min)。 19 } 20 INTクエリ(int型のx、int型の L、INT R) 21 { 22 INT ANS = 0x7FFFFFFFで。 23 であれば(L <= T [X] .L && T [X] .R <= r)はリターンT [X] .min。 24 INT半ば=(T [X] .L + T [X] .R)/ 2 。 25 であれば(L <= MID)ANS = STD ::分(ANS、クエリ(X * 2 、L、R))。 26 であれば(R> MID)ANS = STD ::分(ANS、クエリ(X * 2 + 1 、L、R))。 27の リターンANS; 28 } 29 のint main()の 30 { 31 のscanf(" %D%dの"、&N、&M)。int型のL、R。 32 のために(int型 I = 1 ; ++ I; iが<= N)のscanf(" %dの"、および[I])。 33 ビルド(1、1 、N) 34 のために(int型 I = 1 ; I <= M; ++ i)が{ 35 のscanf(" %dの%のD "、&L&R)。 36 のprintf(" %dの"、クエリ(1 、L、R))。 37 } 38 リターン 0 。 39 }