HDU三部作は、多くの柿の木を取得します

問題の説明
誠二林は、18世紀に長い時間のために会津のドメインで日新館サムライ・スクールの教授でした。教育における彼の功績のキャリアのために彼に報いるために、Katanobu松平、会津のドメインの藩主は、会津盆地に大きなフィールド内で彼に長方形の不動産を与えることにしました。不動産のサイズ(幅と高さ)は厳密に主によって指定されたが、彼はフィールドでの不動産のための任意の場所を選択することが許されました。また、フルーツ「Mishirazu柿」として知られている会津地方の有名な製品の一つであった長方形の形状、多くの日本の柿の木を、持っていたフィールド内では、植えました。柿は、林さんの好きな果物だったので、彼は主によって与えられた不動産にできるだけ多くの柿の木を持っていると思いました。例えば、図1において、フィールド全体は、幅と高さがそれぞれ10及び8である矩形グリッドです。各アスタリスク(*)は、柿の木の場所を表します。不動産の指定された幅と高さがそれぞれ4と3をしている場合は、実線で囲まれた領域は、ほとんどの柿の木が含まれています。同様に、不動産の幅が6であれば、その高さは4で、点線で囲まれた領域がほとんどを持っており、不動産の幅と高さがそれぞれ3と4であれば、点線で囲まれた領域が最も柿の木が含まれています。幅と高さを交換することができないことに注意してください。図1に示すように4により3,3によってサイズ4は、異なっています。不動産の指定された幅と高さがそれぞれ4と3をしている場合は、実線で囲まれた領域は、ほとんどの柿の木が含まれています。同様に、不動産の幅が6であれば、その高さは4で、点線で囲まれた領域がほとんどを持っており、不動産の幅と高さがそれぞれ3と4であれば、点線で囲まれた領域が最も柿の木が含まれています。幅と高さを交換することができないことに注意してください。図1に示すように4により3,3によってサイズ4は、異なっています。不動産の指定された幅と高さがそれぞれ4と3をしている場合は、実線で囲まれた領域は、ほとんどの柿の木が含まれています。同様に、不動産の幅が6であれば、その高さは4で、点線で囲まれた領域がほとんどを持っており、不動産の幅と高さがそれぞれ3と4であれば、点線で囲まれた領域が最も柿の木が含まれています。幅と高さを交換することができないことに注意してください。図1に示すように4により3,3によってサイズ4は、異なっています。点線で囲まれた領域が最も柿の木が含まれています。幅と高さを交換することができないことに注意してください。図1に示すように4により3,3によってサイズ4は、異なっています。点線で囲まれた領域が最も柿の木が含まれています。幅と高さを交換することができないことに注意してください。図1に示すように4により3,3によってサイズ4は、異なっています。
図1:長方形エステートの例
あなたの仕事は、柿の木の最大数が含まれている特定のサイズ(幅と高さ)の不動産を見つけることです。
 
入力
入力は複数のデータセットから成ります。各データセットは、以下の形式で与えられます。
NWH×1 Y1×2 Y2 ... XN YN ST
Nは正の整数未満500 Wである柿の木の数であり、Hは、幅とそれぞれフィールド全体の高さです。あなたは、WとHの両方は、その値が100未満である各iについて(1 <= iが= Nを<)、xiとyiのグリッドにおけるi番目柿ツリーの座標であり、正の整数であると仮定することができます。各座標の原点は、あなたが1 <= XI <= W 1 <= YI <= H、およびno 2つのツリーが同じ位置を有すると仮定することができる1であることに留意されたいです。しかし、あなたは柿の木がその位置に応じて、いくつかの順序でソートされていることを仮定するべきではありません。最後に、SおよびTは、それぞれ主によって与えられた不動産の幅と高さの正の整数です。また、1 <=のS <= W 1 <= T <= Hであると仮定することができる
入力の終了は、単にゼロを含む行で示されています。
 
出力
各データセットについて、あなたは指定されたサイズの不動産に含めることができ柿の木の最大可能数を含む1行を印刷するように要求されています。
 
サンプル入力
16
10 8
2 2
2 5
2 7
3 3
3 8
4 2
4 5
4 8
6 4
6 7
7 5
7 8
8 1
8 4
9 6
10 3
4 3
8
6 4
1 2
2 1
2 4
3 4
4 2
5 3
6 1
6 2
3 2
0
 
サンプル出力
4
3
************************************************** ******************************************
クエリのツリー次元配列:テンプレートを行います。
************************************************** ******************************************
1  / * 
2  次元アレイ木、
 3  オフラインクエリ、
 4は、 update()を持っている;
 5。   GetSumを();
 6つの。   2つの動作を、
 図7は、   結果を覚えて:
 8。 * / 
9。の#include <iostreamの>
 10の#include < 文字列 >
 11の#include <CStringのは>
 12であるの#include <cstdioを>
 13で 使用した 名前空間STD;
 14  int型N-、W、H、X、Y、S、T;
 15  int型 MAX1 [ 105 ] [ 105 ];
 16  INT lowbit(INT X )
 17  {
18      リターン X&( - X)。
19  }
 20  空隙更新(int型のx、int型のY)
 21    {
 22の       ためのint型 I = xを、私は= W <; I + = lowbit(I))
 23          のためのINT J = yであり、j <= hの; J + = lowbit (J))
 24             MAX1 [I] [J] ++ ;
25    }
 26  INT getsum(int型のx、int型のY)
 27  {
 28       int型の和= 0 29       のためのint型I = xで; I> = 1 ; I- = lowbit(I))
 30        のためのINT J = yであり、j> = 1 ; J- = lowbit(J))
 31          合計+ = MAX1 [I] [J]。
32       リターン合計。
33  }
 34  INT )(主
 35  {
 36      ながら(CIN >> N && N)
 37       {
 38           のmemset(MAX1、0はsizeof (MAX1))。
39           CIN >> W H。
40           のためには、int型、それは= 0 ;それ<N;それ++41             {
 42                 CIN >> X >> Y。
43                 更新(X、Y)
44             }
 45           CIN >> S >> T。
46           INT ANS = - 1 47           のためにint型 ;それ<= Wそれ++それは、S = 48            のためのINT JT = T; JT <= H; JT ++ 49               ANS = MAX(ANS、getsum(それは、JT)-getsum(IT-S、 JT)-getsum(それは、JT-T)+ getsum(IT-S、jt- T))。
50          COUT << ANS << ENDL。
51       }
 52 }
コードの表示

ちょっと待って!

ます。https://www.cnblogs.com/sdau--codeants/p/3326675.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34281477/article/details/93727626