POJ 2482 Stars in Your Window
线段树+离散化+扫描线
AC之后,又认真读了一遍题目,好文章。
#include<cstdio>
#include<map>
#include<algorithm>
using namespace std; const int maxn=+;
int n;
long long W,H;
long long x[maxn],y[maxn],v[maxn];
struct seg
{
long long X;
long long Y1,Y2;
long long val;
}s[*maxn];
struct SegTree
{
long long MAX;
long long add;
}segTree[*maxn]; map<long long,int>m;
long long M[maxn];
int k; bool cmp(const seg&a,const seg&b)
{
if(a.X==b.X) return a.val>b.val;
return a.X<b.X;
} void pushUp(int rt)
{
segTree[rt].MAX=max(segTree[*rt].MAX,segTree[*rt+].MAX);
} void pushDown(int rt)
{
if(segTree[rt].add)
{
segTree[*rt].add+=segTree[rt].add;
segTree[*rt+].add+=segTree[rt].add;
segTree[*rt].MAX+=segTree[rt].add;
segTree[*rt+].MAX+=segTree[rt].add;
segTree[rt].add=;
}
} void build(int l,int r,int rt)
{
segTree[rt].add=;
segTree[rt].MAX=;
if(l==r) return; int m=(l+r)/;
build(l,m,*rt);
build(m+,r,*rt+);
} void update(long long val,int L,int R,int l,int r,int rt)
{
if(L<=l&&r<=R)
{
segTree[rt].add+=val;
segTree[rt].MAX+=val;
return;
} pushDown(rt);
int m=(l+r)/;
if(L<=m) update(val,L,R,l,m,*rt);
if(R>m) update(val,L,R,m+,r,*rt+);
pushUp(rt);
} void lsh()
{
m.clear();
k=;
for(int i=;i<=n;i++)
{
if(m[y[i]]==)
{
m[y[i]]=;
M[k++]=y[i];
}
if(m[y[i]+H-]==)
{
m[y[i]+H-]=;
M[k++]=y[i]+H-;
}
}
sort(M,M+k);
//m.clear(); 这个地方比较奇葩。清空了会TLE。。。。
for(int i=;i<k;i++) m[M[i]]=i+;
} int main()
{
//freopen("F:\\in.txt","r",stdin);
while(~scanf("%d%lld%lld",&n,&W,&H))
{
for(int i=;i<=n;i++) scanf("%lld%lld%lld",&x[i],&y[i],&v[i]);
lsh();
int tot=;
for(int i=;i<=n;i++)
{
s[tot].X=x[i];
s[tot].Y1=m[y[i]];
s[tot].Y2=m[y[i]+H-];
s[tot].val=v[i];
tot++; s[tot].X=x[i]+W-;
s[tot].Y1=m[y[i]];
s[tot].Y2=m[y[i]+H-];
s[tot].val=-v[i];
tot++;
} sort(s,s+tot,cmp); build(,k,); long long max_val=; for(int i=;i<tot;i++)
{
update(s[i].val,s[i].Y1,s[i].Y2,,k,);
max_val=max(segTree[].MAX,max_val);
}
printf("%lld\n",max_val);
}
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 读完题干不免有些心酸(
- POJ 2482 Stars in Your Window(扫描线+线段树)
[题目链接] http://poj.org/problem?id=2482 [题目大意] 给出一些点的二维坐标和权值,求用一个长H,宽W的矩形能框住的最大权值之和, 在矩形边缘的点不计算在内 [题解] ...
- POJ 2482 Stars in Your Window 离散化+扫描法 线段树应用
遇见poj上最浪漫的题目..题目里图片以上几百词为一篇模板级英文情书.这情感和细腻的文笔深深地打动了我..不会写情书的童鞋速度进来学习.传送门 题意:坐标系内有n个星星,每个星星都有一个亮度c (1& ...
- POJ 2482 Stars in Your Window (线段树+扫描线+区间最值,思路太妙了)
该题和 黑书 P102 采矿 类似 参考链接:http://blog.csdn.net/shiqi_614/article/details/7819232http://blog.csdn.net/ts ...
随机推荐
- isPostBack原理
从 到输入用户名,点击提交按钮 这个过程就叫做postback(是两个不同的状态) 利用ispostback原理,实现是否第一次进入处理程序(上一个用用户名判断的不好,会导致在用户名空的情况下 ...
- vbscript语句
'vbscript语句Call'[call] name [argumentlist]'把控制转移到函数或子程序.当调用函数或子程序时,Call是可写可不写的.但是如果你用了Call,那么argumen ...
- Jquery 实现原理之 Ajax
一:Jquery Ajax底层接口有:$.ajaxPrefilters.$.ajaxTransport.$.ajaxSettings.$ajaxSetup.$ajaxSettings; 其中$.aja ...
- ubuntu14下python环境的配置
1.安装build依赖包(一些包需要用pip编译) sudo apt-get install python-dev 2.安装pip包管理工具 sudo apt-get install python-p ...
- VIM继承C语言(转)
在下面的基础上加上了astyle sh.c --style=kr --indent=spaces --indent-cases --pad-header --pad-oper --unpad-pare ...
- python 压缩 解压缩 文件
1. 用zipfile模块打包文件或是目录.解压zip文件 http://wangwei007.blog.51cto.com/68019/1045577 #!/usr/bin/env python # ...
- lucene特殊字符处理
这是个郁闷的问题,今天遇到了,但在lucene中查询的关键字保护有特殊字符,譬如--,会出现如下异常: org.apache.lucene.queryParser.ParseException: Ca ...
- Sea.Js使用入门
1.Sea.Js是什么 seajs相对于RequireJs与LabJS就比较年轻,2010年玉伯发起了这个开源项目,SeaJS遵循CMD规范,与RequireJS类似,同样做为模块加载器.示例 // ...
- 转:Selenium2.0介绍——WebDriver两种驱动浏览器的方式.
如果之前熟悉Selenium RC,理解了Selenium RC是如何工作的,那么,当第一次接触Selenium WebDriver的时候,看到WebDriver居然可以不需要指定远端服务器的IP地址 ...
- Mybatis学习(5)高级映射
需求: 一.一对一查询 查询订单信息,关联查询创建订单的用户信息: orders--->user:一个订单只由一个用户创建,一对一 orders表 和 user表: 1)使用resultType ...