树状数组 Get Many Persimmon Trees
来源:互联网 发布:淘宝注册页面表单代码 编辑:程序博客网 时间:2024/06/10 17:51
Description
For example, in Figure 1, the entire field is a rectangular grid whose width and height are 10 and 8 respectively. Each asterisk (*) represents a place of a persimmon tree. If the specified width and height of the estate are 4 and 3 respectively, the area surrounded by the solid line contains the most persimmon trees. Similarly, if the estate's width is 6 and its height is 4, the area surrounded by the dashed line has the most, and if the estate's width and height are 3 and 4 respectively, the area surrounded by the dotted line contains the most persimmon trees. Note that the width and height cannot be swapped; the sizes 4 by 3 and 3 by 4 are different, as shown in Figure 1.
Figure 1: Examples of Rectangular Estates
Your task is to find the estate of a given size (width and height) that contains the largest number of persimmon trees.
Input
N
W H
x1 y1
x2 y2
...
xN yN
S T
N is the number of persimmon trees, which is a positive integer less than 500. W and H are the width and the height of the entire field respectively. You can assume that both W and H are positive integers whose values are less than 100. For each i (1 <= i <= N), xi and yi are coordinates of the i-th persimmon tree in the grid. Note that the origin of each coordinate is 1. You can assume that 1 <= xi <= W and 1 <= yi <= H, and no two trees have the same positions. But you should not assume that the persimmon trees are sorted in some order according to their positions. Lastly, S and T are positive integers of the width and height respectively of the estate given by the lord. You can also assume that 1 <= S <= W and 1 <= T <= H.
The end of the input is indicated by a line that solely contains a zero.
Output
Sample Input
1610 82 22 52 73 33 84 24 54 86 46 77 57 88 18 49 610 34 386 41 22 12 43 44 25 36 16 23 20
Sample Output
4
就是二维树状数组的模板题 注意画的那个框的坐标就行 还有 lowbit中 有0 会死循环
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int w,h;
int c[105][105];
int lowbit(int i)
{
return i&(-i);
}
void update(int x,int y,int v)
{
for(int i=x;i<=w;i+=lowbit(i))
{
for(int j=y;j<=h;j+=lowbit(j))
c[i][j]+=v;
}
}
int query(int x,int y)
{
int ans=0;
for(int i=x;i>0;i-=lowbit(i))
{
for(int j=y;j>0;j-=lowbit(j))
ans+=c[i][j];
}
return ans;
}
int main()
{
int n;
while(~scanf("%d",&n)&&n)
{
memset(c,0,sizeof(c));
scanf("%d%d",&w,&h);
while(n--)
{
int x,y;
scanf("%d%d",&x,&y);
update(x,y,1);
}
int s,t;
scanf("%d%d",&s,&t);
int max=-999;
for(int i=1;i+s-1<=w;i++)
{
for(int j=1;j+t-1<=h;j++)
{
int tmp=query(s+i-1,t+j-1)-query(s+i-1,j-1)
-query(i-1,t+j-1)+query(i-1,j-1);
if(tmp>max)max=tmp;
}
}
printf("%d\n",max);
}
return 0;
}
- POJ2029 Get Many Persimmon Trees(树状数组~)
- 树状数组 Get Many Persimmon Trees
- poj 2029 Get Many Persimmon Trees 二维树状数组
- POJ 2029 Get Many Persimmon Trees(二维树状数组)
- POJ 2029 Get Many Persimmon Trees 二维树状数组
- poj 2029 Get Many Persimmon Trees 二维树状数组 大水
- POJ2029--Get Many Persimmon Trees(枚举+二维树状数组)
- poj 2029 Get Many Persimmon Trees(二维树状数组)
- poj 2029 Get Many Persimmon Trees (二维树状数组)
- Poj 2029 Get Many Persimmon Trees 二维树状数组
- POJ 2029 Get Many Persimmon Trees (二维树状数组)
- poj 2029 Get Many Persimmon Trees 二维树状数组
- POJ2029:Get Many Persimmon Trees(二维树状数组)
- poj 2029 Get Many Persimmon Trees 【二维树状数组】
- POJ 2029 Get Many Persimmon Trees(二维树状数组)
- (POJ 2029)Get Many Persimmon Trees <二维树状数组>
- poj 2029 Get Many Persimmon Trees 二维树状数组
- poj 2029 Get Many Persimmon Trees(树状数组)
- 关于 IIS环境运行PHP程序
- 架构设计:负载均衡层设计方案(7)——LVS + Keepalived + Nginx安装及配置
- 技术相关 | J2ME-MIDlet和Android-Activity生命周期的比较
- python,shell
- 机房交换机基础配置 -- Mellanox SN2700
- 树状数组 Get Many Persimmon Trees
- Storm计算模型
- 【poj1007】DNA Sorting
- 造成com.android.ide.common.process.ProcessException: Failed to execute aapt 错误可能的原因(已解决)
- 设计模式之创建者模式的学习思考
- Linux内核同步的方法 总结
- Mysql并发时经典常见的死锁原因及解决方法
- 排序算法之直接插入排序、二分插入排序和希尔排序
- 页面表单提交到servlet后转为对象工具类