HDU 부작 많은 감 나무를 가져옵니다

문제 설명
세이지 하야시는 18 세기에 오랫동안 아이즈의 도메인에서 Nisshinkan 사무라이 학교의 교수였다. 교육에 그의 공적 경력을 위해 그를 보상하기 위해, 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 X1, Y1 내지 2 배의 Y2 ... xN으로 YN ST
N은 양의 정수 미만 500 W 인 감 나무의 개수이고, H는 폭이 각각 전 필드의 높이이다. 당신은 W 및 H가 모두 그 값이 각 옵션 (100)보다 적은 양의 정수인 것으로 가정 할 수 I (1 <i가 <= N), XI과 이순신 그리드 i 번째 감나무의 좌표이다. 각각의 원점 좌표를 참고하면 1 <= XI <= W 1 <= 이순신 <= H, 어떤 두 나무가 동일한 위치에 있다고 가정 할 수있다 (1). 하지만 당신은 감나무가 자신의 위치에 따라 어떤 순서로 정렬되어 있다고 가정해서는 안된다. 마지막으로, S 및 T는 각각 주 의해 주어진 면적의 폭과 높이의 양의 정수이다. 또한 추정 할 수있는 1 <= S <= W 1 <= T <= H.을
입력의 단부만으로 제로 포함하는 선으로 표시된다.
 
산출
각 데이터 세트의 경우는 지정된 사이즈의 재산에 포함시킬 수 감나무의 가능한 최대 수를 포함하는 하나 개의 라인을 인쇄하여 주시기 바랍니다.
 
샘플 입력
(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 일
8 4
9 6
10 세
4 3
8
6 4
1 2
2 1
2 4
3 4
4 2
5 3
6 일
6 2
3 2
0
 
샘플 출력
4
************************************************** ******************************************
트리 차원 쿼리의 배열 : 템플릿을;
************************************************** ******************************************
1  / * 
2  차원 배열 트리
 3  오프라인 쿼리
 4  업데이트 ()을 가지고,
 (5).    GetSum을 ();
 6 개.    두 동작을,
 도 7은    결과를 기억 :
 8.  * / 
9. #INCLUDE <iostream>
 10 #INCLUDE < 문자열 >
 . 11 #INCLUDE <CString을는>
 12이다 #INCLUDE <cstdio>
 13  은 USING  스페이스 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)       에 대한 ( INTI = 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           w CIN >> 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 그것은 ++ )
 48             ( INT JT = t; JT <= h를, JT ++ )
 49               ANS = 최대 (ANS, getsum (IT, JT) -getsum (그것은-S, JT) -getsum (IT, 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