AcWing 248. 窗内的星星 (扫描线)打卡
题目:https://www.acwing.com/problem/content/250/
题意:给你n个点,现在问你能每个点都有个权值,问你能覆盖最多的权值是多少,边界不算
思路:这个其实和我之前有篇博客思路一样,那个是只用求覆盖最多的点是什么,我们也只要建扫描线,因为我们可以把每个点看作成一个区域,然后代表在这个区域内可以覆盖到这个点,这个题的话只要把扫描线原先那个入边出边的权值改成点的权值即可,然后判边界问题
https://www.cnblogs.com/Lis-/p/11279390.html
#include <bits/stdc++.h>
using namespace std;
const int N=2e4+;//要2*n,切记切记,我就是因为这个恶心的锅,坑害了一个半小时.
#define int long long//注意
#define lson l,(l+r)/2,p<<1
#define rson (l+r)/2,r,p<<1|1
int n,w,h,ys[N];
struct line_tree
{
int l,r,len,lazy;//开了懒惰标记,也就是延迟标记
#define l(x) x<<1
#define r(x) (x<<1)+1
#define m(x) (t[x].l+t[x].r)>>1
} t[N<<];
struct node
{
int x,y1,y2,f;
} p[N];
int cmp(node a,node b)
{
return a.x<b.x || (a.x==b.x && a.f<);//排序特殊点
}
inline void push_up(int p)
{
t[p].len=max(t[l(p)].len,t[r(p)].len)+t[p].lazy;
}
inline void build(int l,int r,int p)
{
t[p].l=ys[l];
t[p].r=ys[r];
t[p].lazy=;
t[p].len=;
if (r-l==)
return ;
int mid=(l+r)>>;
build(lson);
build(rson);
push_up(p);
}
inline void change(int l,int r,int k,int p)
{
if (t[p].l>=l && t[p].r<=r)
{
t[p].lazy+=k;
t[p].len+=k;
return ;
}
if (l<t[l(p)].r)
change(l,min(r,t[l(p)].r),k,l(p));
if (r>t[r(p)].l)
change(max(l,t[r(p)].l),r,k,r(p));
push_up(p);
}
inline void init()
{
while(scanf("%lld%lld%lld",&n,&w,&h)!=EOF)
{
int cnt=,num=;
for(int i=; i<=n; i++)
{
int xx,yy,k;
scanf("%lld%lld%lld",&xx,&yy,&k) ;
p[cnt].x=xx;
p[cnt].y1=yy;
p[cnt].y2=yy+h;
p[cnt++].f=k; p[cnt].x=xx+w;
p[cnt].y1=yy;
p[cnt].y2=yy+h;
p[cnt++].f=-k; ys[num++]=yy;
ys[num++]=yy+h;
}
sort(ys+,ys+num);
int ans=;
num=unique(ys+,ys+num)-(ys+);
sort(p,p+cnt,cmp);
build(,num,);
for(int i=; i<cnt; i++)
{
change(p[i].y1,p[i].y2,p[i].f,);
if(p[i].f>)
ans=max(ans,t[].len);
}
printf("%lld\n",ans);
}
}
signed main()
{
// freopen("stdin.in","r",stdin);
// freopen("stdout.out","w",stdout);
init();
return ;
}
AcWing 248. 窗内的星星 (扫描线)打卡的更多相关文章
- ACWing 248. 窗内的星星|扫描线+懒惰标记
传送门 题目描述 在一个天空中有很多星星(看作平面直角坐标系),已知每颗星星的坐标和亮度(都是整数). 求用宽为W.高为H的矩形窗户(W,H为正整数)能圈住的星星的亮度总和最大是多少.(矩形边界上的星 ...
- android获取内置和外置SD卡路径 - z
本文将介绍Android真机环境下如何获取内置和外置SD卡路径. 测试环境:三星Note3,其他手机待测试... 所需权限(AndroidManifest.xml文件里) <uses-permi ...
- 洛谷p1502窗口的星星 扫描线
题目链接:https://www.luogu.org/problem/P1502 扫描线的板子题,把每个点看成矩形,存下边(x,y,y+h-1,li)和(x+w-1,y,y+h-1),在按横坐标扫线段 ...
- 10万用户一年365天的登录情况如何用redis存储,并快速检索任意时间窗内的活跃用户
1.redsi的bitmap数据结构介绍 bitmap本质上是一个string类型,只是他操作的是string的某个位是0还是1. setbit和getbit 两条命令是对字符串的位操作.每个位只能是 ...
- AcWing 220.最大公约数 欧拉函数打卡
题目:https://www.acwing.com/problem/content/222/ 题意:求1-n范围内,gcd(x,y)是素数的对数 思路:首先我们可以针对每个素数p,那么他的贡献应该时 ...
- Android内置和外置SD卡的位置获取
public class StorageUtils { private static String TAG="123"; // 获取主存储卡路径 内置内存卡路径 public st ...
- AcWing 252. 树 (点分治)打卡
题目:https://www.acwing.com/problem/content/254/ 题意:求一棵树上,路径<=k的有多少条 思路:点分治,我们用两个指针算solve函数,首先对算出来的 ...
- AcWing 224. 计算器 (BSGS算法)打卡
题目:https://www.acwing.com/problem/content/226/ 题意:有一个计算器能完成三种功能 1.给定Y,Z,P,计算YZModPYZModP 的值: 2.给定Y,Z ...
- AcWing 197. 阶乘分解 (筛法)打卡
给定整数 N ,试把阶乘 N! 分解质因数,按照算术基本定理的形式输出分解结果中的 pipi 和 cici 即可. 输入格式 一个整数N. 输出格式 N! 分解质因数后的结果,共若干行,每行一对pi, ...
随机推荐
- Jquery.extend()和jQuery.fn.extend(object);
摘自: jquery $.fn $.fx是什么意思有什么用_jquery_脚本之家 jQuery.extend(object); 为扩展jQuery类本身.为类添加新的方法. jQuery.fn.ex ...
- python datetime模块的strftime()
strftime() 可以对datetime对象进行格式化,生成需要时间格式的时间 strptime() 可以对格式化后的时间再生成datetime对象 格式化时间时,如果不想要-来隔开,还可以 ...
- docker hub 本地镜像登录
docker的登录信息存放在home目录下的.docker文件夹下,查看 cat ~/.docker/config.json { "auths": { "gcyimgs. ...
- Linux 安装jdk+mysql+tomcat
参考: 安装 jdk+mysql+tomcat https://www.w3h5.com/post/65.html 安装 mysql https://blog.csdn.net/qq_23123 ...
- array_map() 函数
定义和用法 array_map() 函数返回用户自定义函数作用后的数组.回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致. 语法 array_map(function,a ...
- python之从文件中按行读取数据
#!/usr/bin/env python3 # -*- coding: utf-8 -*- __author__ = 'jiangwenwen' # 从文件中按行读取数据 file = open(& ...
- ExcelVBA 操作putty
Private Sub login(ip As String, userName As String, password As String) Dim TaskID As Long '设置进程id p ...
- Shell脚本语言学习总结
Shell 是一种脚本程序,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了. 编写第一个Shell 程序 在linux命令行执行 [root@iz2zeexr9tk4ckr7dp ...
- 0x3f3f3f3f 0xbfbfbfbf 等的原理及应用
原理 0x的意思其实是十六进制,后面加的数其实就是一个十六进制数. 在十六进制中,我们知道a代表10,b代表11,c代表12,d代表13,e代表14,f代表15. 所以3f3f3f3f这个数用十进制数 ...
- jquery实现按键增加删除css属性(hide)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...