POJ - 2482:Stars in Your Window (扫描线 )
题意:二维平面上给你N颗星,给出星星的坐标,亮度; 然后给你一个W*H的窗口,问你最大的亮度和。
思路:扫描线,假设有一个inf*H的窗口,按照y排序,那么就把H范围内的星星放入了这个窗口(单调队列实现),现在就成了华东窗口问题,在一维数组里面找长度为W的窗口的最大和,但是现在带修改,单点修改,固定区间查询,怎么做呢? 和学生讨论了一下,常规的很难实现。 我们需要转化一下,把单点修改转化为区间修改,然后单点查询最大值。 如果x处插入L,则[x,Rx]区间加x。 ans=max(mx[1]);
(可以出一道,待修改的滑动窗口问题。
#include<iostream>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
struct in{
int x,y,l;
bool friend operator <(in w,in v){
return w.y<v.y;
}
}s[maxn];
int ans,W,H,lazy[maxn],mx[maxn];
int b[maxn],tot,p[maxn];
void pushdown(int Now)
{
if(!lazy[Now]) return ;
lazy[Now<<]+=lazy[Now]; lazy[Now<<|]+=lazy[Now];
mx[Now<<]+=lazy[Now]; mx[Now<<|]+=lazy[Now];
lazy[Now]=;
}
void add(int Now,int L,int R,int l,int r,int val)
{
if(l<=L&&r>=R){
mx[Now]+=val;
lazy[Now]+=val;
return ;
}
pushdown(Now); int Mid=(L+R)>>;
if(l<=Mid) add(Now<<,L,Mid,l,r,val);
if(r>Mid) add(Now<<|,Mid+,R,l,r,val);
mx[Now]=max(mx[Now<<],mx[Now<<|]);
}
int main()
{
int T,N;
while(~scanf("%d%d%d",&N,&W,&H)){
ans=; tot=;
rep(i,,N) scanf("%d%d%d",&s[i].x,&s[i].y,&s[i].l);
sort(s+,s+N+);
rep(i,,N<<) lazy[i]=mx[i]=;
rep(i,,N) b[++tot]=s[i].x;
sort(b+,b+N+);
tot=unique(b+,b+N+)-(b+);
rep(i,,N) s[i].x=lower_bound(b+,b+tot+,s[i].x)-b;
int R=;
rep(i,,tot) {
while(R+<=tot&&b[R+]-b[i]+<=W) R++;
p[i]=R;
}
for(int i=,j=;i<=N;i++){
add(,,tot,s[i].x,p[s[i].x],s[i].l);
while(j<=i&&s[i].y-s[j].y+>H) {
add(,,tot,s[j].x,p[s[j].x],-s[j].l);
j++;
}
ans=max(ans,mx[]);
}
printf("%d\n",ans);
}
return ;
}
POJ - 2482:Stars in Your Window (扫描线 )的更多相关文章
- poj 2482 Stars in Your Window(扫描线)
id=2482" target="_blank" style="">题目链接:poj 2482 Stars in Your Window 题目大 ...
- POJ 2482 Stars in Your Window(线段树)
POJ 2482 Stars in Your Window 题目链接 题意:给定一些星星,每一个星星都有一个亮度.如今要用w * h的矩形去框星星,问最大能框的亮度是多少 思路:转化为扫描线的问题,每 ...
- poj 2482 Stars in Your Window + 51Nod1208(扫描线+离散化+线段树)
Stars in Your Window Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13196 Accepted: ...
- POJ 2482 Stars in Your Window 线段树扫描线
Stars in Your Window Description Fleeting time does not blur my memory of you. Can it really be 4 ...
- (中等) POJ 2482 Stars in Your Window,静态二叉树。
Description Here comes the problem: Assume the sky is a flat plane. All the stars lie on it with a l ...
- POJ 2482 Stars in Your Window(扫描线+线段树)
[题目链接] http://poj.org/problem?id=2482 [题目大意] 给出一些点的二维坐标和权值,求用一个长H,宽W的矩形能框住的最大权值之和, 在矩形边缘的点不计算在内 [题解] ...
- POJ 2482 Stars in Your Window (线段树区间合并+扫描线)
这题开始一直被矩形框束缚了,想法一直都是枚举线,但是这样枚举都需要O(n^2)...但是看了别人的思路,感觉这题思想真心很好(PS:开头好浪漫的描述啊,可惜并没有什么用) 题意就是在平面上给你一些星 ...
- POJ 2482 Stars in Your Window (线段树+扫描线+区间最值,思路太妙了)
该题和 黑书 P102 采矿 类似 参考链接:http://blog.csdn.net/shiqi_614/article/details/7819232http://blog.csdn.net/ts ...
- poj 2482 Stars in Your Window (线段树扫描线)
题目大意: 求一个窗体覆盖最多的星星的权值. 思路分析: 每个星星看成 左下点为x y 右上点为x+w-1 y+h-1 的矩形. 然后求出最大覆盖的和. #include <cstdio> ...
- POJ 2482 Stars in Your Window(线段树+扫描线)
题目链接 非常不容易的一道题,把每个点向右上构造一个矩形,将问题转化为重合矩形那个亮度最大,注意LL,注意排序. #include <cstdio> #include <cstrin ...
随机推荐
- 怎么去掉织梦(dedecms)网站首页默认携带的index.html尾巴
如果你的网站带小尾巴,比如这样的 那你就要注意了,因为这会导致搜索引擎会认为和不带尾巴的页面是两个页面,都会参与排名,会分散首页的权重. 那我们怎么去除呢? 方法1: 1)在空间面板里面找到默认首页设 ...
- jquery ajax分页写法
jquery ajax分页写法我用的是laypage插件 前端代码<pre> function demo(curr) { $.getJSON('/home/index/getinfo', ...
- ThinkPHP3(命名空间、RBAC)
命名空间 当开发大型项目的时候,可以会需要成千上万的文件 面向对象通过命名空间来解决这个问题的. PHP命名空间是PHP5.3以后才出现的. 命名空间中可以出现:类,函数,常量 只有const定义的常 ...
- LeNet-5 卷积神经网络结构图
LeNet-5是Yann LeCun在1998年设计的用于手写数字识别的卷积神经网络,当年美国大多数银行就是用它来识别支票上面的手写数字的,它是早期卷积神经网络中最有代表性的实验系统之一.可以说,Le ...
- FineUI 模板列动态删除方法
本来这是asp.net写法,跟fineui一点关系都没有,但是还是有人不会写不会查找.还是做个分享吧. <f:TemplateField runat="server" ...
- 以Unicode(UTF-16 LE)编码保存文本
1. 以二进制方式打开文件,写入BOM头 FILE* pFile = nullptr; _wfopen_s(&pFile, szLogFilePath, L"wb"); / ...
- Flask源码之:配置加载
加载配置文件的思路: 1. 读取配置文件中的所有键值对,并将键值对全都放到Config对象.(Config是一个字典,因为它继承了Dict) 2. 把包含所有配置文件的Config对象,赋值给 app ...
- c#利用定时器自动备份数据库(mysql)
1:引用dll MySql.Data.dll, MySqlbackup.dll 2:建一个数据连接静态类 public static class mysql{public static strin ...
- docker build 错误 /usr/share/dotnet/sdk/2.1.801/Microsoft.Common.CurrentVersion.targets(2106,5): warning MSB3245: Could not resolve this reference
docker dotnet Restore 的时候报错, 一度怀疑是linux的dotnet core sdk没有装好, 卸了装, 装了卸, 试了好几遍还是无效(Microsoft.Common.Cu ...
- 如何在一个Docker中同时运行多个程序进程?
我们都知道Docker容器的哲学是一个Docker容器只运行一个进程,但是有时候我们就是需要在一个Docker容器中运行多个进程 那么基本思路是在Dockerfile 的CMD 或者 ENTRYPOI ...