题目链接

P1502 窗口的星星

题解

扫描线+线段树

线段树的每一个节点处理的是左边框放在当前x-1位置时的框内星星的亮度大小

按照x坐标进行离散化,得到离散化后每一个坐标x的可影响的范围

维护扫描线,扫到可以加某颗星星就把星星加进去,扫到该出来的时候就把星星搞出来,线段树维护一下

代码

#include<cstdio>
#include<cstring>
#include<algorithm> const int maxn = 100007; int n,w,h;
int pou[maxn << 2],T[maxn << 2],tag[maxn << 2]; struct P {
int x,y,l,k,ymax,id;
}star[maxn << 2];
inline bool cmp1(P a,P b) { return a.y < b.y; }
inline bool cmp2(P a,P b) { if(a.id == b.id) return a.k < b.k; return a.id < b.id; }
inline bool cmp3(P a,P b) { if(a.x == b.x) return a.k < b.k; return a.x < b.x; }
void pushdown(int x,int l,int r) {
if(!tag[x]) return;
if(l == r) { tag[x] = 0; return; }
int mid = l + r >> 1;
tag[x << 1] += tag[x]; tag[x << 1 | 1] += tag[x];
T[x << 1] += tag[x]; T[x << 1 | 1]+=tag[x];
tag[x] = 0;
} void modify(int x,int l,int r,int tl,int tr,int val){
pushdown(x,l,r);
if(tl <= l && r <= tr) {
tag[x] = val; T[x] += val;
return;
}
int mid = (l + r) >> 1;
if(tl <= mid) modify(x << 1,l,mid,tl,tr,val);
if(mid < tr) modify(x << 1 | 1,mid + 1,r,tl,tr,val);
T[x] = std::max(T[x << 1],T[x << 1 | 1]);
}
void init() {
memset(T,0,sizeof(T));
memset(tag,0,sizeof(tag));
scanf("%d%d%d",&n,&w,&h);
for(int x,y,l,i = 1;i <= n ;++ i) {
scanf("%d%d%d",&x,&y,&l);
star[i] = (P) {x, y, l, 1};
star[i + n] = (P){ x + w - 1, y, -l, 2};
star[i + (n << 1)].y = y + h - 1;
star[i + (n << 1)].k = 3;
star[i].id = star[i + n].id = star[i + (n << 1)].id = i;
}
} void solve() {
std::sort(star + 1,star + n * 3 + 1,cmp1);
int cnt = 0;
for(int i = 1;i <= n * 3;++ i) pou[i] = star[i].y;
for(int i = 1;i <= n * 3;++ i)
if(star[i].y == pou[i - 1]) star[i].y = star[i - 1].y;
else star[i].y =++ cnt;
std::sort(star + 1,star + n * 3 + 1,cmp2);
for(int i = 1;i <= n * 3;i += 3) star[i].ymax = star[i + 1].ymax = star[i + 2].y;
for(int i = 3;i <= n << 1;++ i) star[i] = star[i + ((i - 1) >> 1)];
std::sort(star + 1,star + (n << 1) + 1,cmp3);
int ans = 0;
for(int i = 1;i <= n << 1;++ i) {
modify(1,0,cnt,star[i].y,star[i].ymax,star[i].l);
ans = std::max(ans,T[1]);
}
printf("%d\n",ans);
return ;
}
int main() {
int t; scanf("%d",&t);
while(t --) {
init();
solve();
}
return 0;
}

luogu P1502 窗口的星星的更多相关文章

  1. 洛谷 P1502 窗口的星星 解题报告

    P1502 窗口的星星 题目背景 小卡买到了一套新房子,他十分的高兴,在房间里转来转去. 题目描述 晚上,小卡从阳台望出去,"哇~~~~好多星星啊",但他还没给其他房间设一个窗户, ...

  2. 洛谷p1502窗口的星星 扫描线

    题目链接:https://www.luogu.org/problem/P1502 扫描线的板子题,把每个点看成矩形,存下边(x,y,y+h-1,li)和(x+w-1,y,y+h-1),在按横坐标扫线段 ...

  3. 【Luogu P1502】窗口的星星

    Luogu P1502 题意很好理解,就是问给出的矩形套住的最大和. 但是做起来却十分麻烦. --来自疯狂爆10分的愤怒 一个比较高效的思路是--把每一个星星作为左下角向右上方拓展形成一个矩形, 拓展 ...

  4. 【Luogu P1502】 窗口的星星

    →传送窗口 (复制一下题面好了~) 题目背景 小卡买到了一套新房子,他十分的高兴,在房间里转来转去. 题目描述 晚上,小卡从阳台望出去,“哇~~~~好多星星啊”,但他还没给其他房间设一个窗户,天真的小 ...

  5. 【洛谷 P1502】 窗口的星星(扫描线)

    题目链接 把每个星星作为左下角,做出长为\(w-0.5\),宽为\(h-0.5\)的矩形. \(-0.5\)是因为边框上的不算. 离散化\(y\)坐标. 记录\(2n\)个\(4\)元组\((x,y1 ...

  6. 【louguP1502】窗口的星星

    题目链接 用两条扫描线从左往右扫描,距离为W,右边的扫描线扫到就加上,左边的扫到就减去, 线段树上的一点\(x\)维护\((x,x+H)\)的星星总价值,修改时直接修改\((x-H,x)\)就行了 坐 ...

  7. luogu1502 窗口的星星

    扫描线应该打懒标记的-- #include <algorithm> #include <iostream> #include <cstdio> using name ...

  8. Luogu1502 窗口的星星 (线段树扫描线)

    将每个点拓展为矩形,将\(y\)离散,延\(x\)轴扫描,每次更新最值 用了一百年的pushdown操作疑似有问题,亦或这道题特殊,我乱改了pushdown位置就过了,我能怎么办,WA了一发,y数组没 ...

  9. 【学习笔记】线段树—扫描线补充 (IC_QQQ)

    [学习笔记]线段树-扫描线补充 (IC_QQQ) (感谢 \(IC\)_\(QQQ\) 大佬授以本内容的著作权.此人超然于世外,仅有 \(Luogu\) 账号 尚可膜拜) [学习笔记]线段树详解(全) ...

随机推荐

  1. mongodb与mysql的区别与具体应用场景

    MongoDB: 非关系型数据库,文档型数据库, 文档型数据库:可以存放xml,json,bson类型的数据.这些数据具备自述性(self-describing),呈现分层的树状数据结构.数据结构由键 ...

  2. RESTful记录-RESTful服务

    按照REST架构,一个RESTful Web服务不应该继续服务器的客户端的状态.这种限制被称为无状态.它负责客户以它的上下文传递给服务器,然后服务器可以存储这样的上下文,以处理客户端的进一步请求.例如 ...

  3. spring注解 @Scheduled(cron = "0 0 1 * * *")实现定时的执行任务

    @Scheduled(cron = "0 0 1 * * *") 在使用该注解以前请做好以下准备工作,配置好相应的xm文件. 配置定时注解的步骤:http://blog.csdn. ...

  4. bzoj千题计划246:bzoj2242: [SDOI2011]计算器

    http://www.lydsy.com/JudgeOnline/problem.php?id=2242 #include<map> #include<cmath> #incl ...

  5. bzoj千题计划227:bzoj1486: [HNOI2009]最小圈

    http://www.lydsy.com/JudgeOnline/problem.php?id=1486 二分答案 dfs版spfa判负环 #include<queue> #include ...

  6. 浅谈 js 下 with 对性能的影响

    这几天多次看到有博主们在写 with 的文章,这货确实非常方便,但是却是个性能杀手,所以一直都是上不得台面的.那么他究竟会让效率低下到什么程度呢?先来看下 with 是如何的便捷吧.. // 正常调用 ...

  7. jQuery下ajax事件的简单分析

    昨天写了一篇关于监视页面动态生成元素问题的文章,引起了一些小小的争议,不过我从中学到了很多.文章在这,<jQuery下实现等待指定元素加载完毕>当然 动态生成的节点元素 分很多种情况,这里 ...

  8. 【转】VTL-vm模板的变量用法

    http://www.cnblogs.com/zengxlf/archive/2009/05/06/1451004.html 加载foot模块页 #parse("foot.vm") ...

  9. 【转】XMPP_3920_最靠谱的中文翻译文档

    CHENYILONG Blog XMPP_3920_最靠谱的中文翻译文档 Fullscreen © chenyilong. Powered by Postach.io Blog

  10. Anaconda+django写出第一个web app(六)

    今天学习如何写一个注册用户的界面. 上一节的导航栏中我们修改了导航栏右侧的文字为register并将路径设置为/register,内容如下: <li><a href="/r ...