【CF815D】Karen and Cards 单调栈+扫描线
【CF815D】Karen and Cards
题意:一张卡片有三个属性a,b,c,其上限分别为A,B,C,现在有n张卡片,定义一张卡片能打败另一张卡片当且仅当它的至少两项属性要严格大于另一张的对应属性。问在所有可能的卡片中,有多少种能打败这全部n张卡。
n,A,B,C<=500000
题解:我们反过来,统计哪些卡片不能打败全部的卡。
我们先确定一个属性c,那么对于某张卡片(ai,bi,ci),如果c<=ci,则要求!(a>ai&&b>bi);如果c>ci,则要求a<=ai&&b<=bi。这两种情况都可以用平面上的两个矩形来表示。
那么我们要做的就是动态维护这些矩形的并,发现矩形的并一定越来越小,反过来就是越来越大,我们用单调栈预处理一下,然后用扫描线统计即可。
#include <cstring>
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=500010;
typedef long long ll;
ll ans,sum;
int n,A,B,C,top,tx,ty;
struct node
{
int a,b,c;
}p[maxn];
int st[maxn],x[maxn],y[maxn];
inline int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-') f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+(gc^'0'),gc=getchar();
return ret*f;
}
bool cmpa(const node &a,const node &b)
{
return a.a<b.a;
}
bool cmpc(const node &a,const node &b)
{
return a.c>b.c;
}
int main()
{
n=rd(),A=rd(),B=rd(),C=rd();
int i,j;
for(i=1;i<=n;i++) p[i].a=rd(),p[i].b=rd(),p[i].c=rd();
sort(p+1,p+n+1,cmpa);
for(i=1;i<=n;i++)
{
while(top&&p[i].b>p[st[top]].b) top--;
st[++top]=i;
}
sum=1ll*A*B,st[top+1]=0;
for(i=1;i<=top;i++)
{
sum-=1ll*(p[st[i]].a-p[st[i-1]].a)*p[st[i]].b;
for(j=p[st[i-1]].a+1;j<=p[st[i]].a;j++) y[j]=p[st[i]].b;
for(j=p[st[i]].b;j>p[st[i+1]].b;j--) x[j]=p[st[i]].a;
}
sort(p+1,p+n+1,cmpc);
for(tx=ty=j=1,i=C;i;i--)
{
for(;j<=n&&p[j].c>=i;j++)
{
for(;tx<=p[j].a;tx++) sum-=B-max(y[tx],ty-1);
for(;ty<=p[j].b;ty++) sum-=A-max(x[ty],tx-1);
}
ans+=sum;
}
printf("%lld",ans);
return 0;
}
【CF815D】Karen and Cards 单调栈+扫描线的更多相关文章
- CF815D Karen and Cards
CF815D Karen and Cards 固定一维c,然后(a,b)看成坐标,矩形区域求交 1.Segment tree Beats! 2.改成不合法的区域就是求并,c反向枚举,区域只增不减且完全 ...
- 【BZOJ4826】[Hnoi2017]影魔 单调栈+扫描线
[BZOJ4826][Hnoi2017]影魔 Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样的灵魂,包括诗人.牧师.帝 ...
- Codeforces 407E - k-d-sequence(单调栈+扫描线+线段树)
Codeforces 题面传送门 & 洛谷题面传送门 深感自己线段树学得不扎实-- 首先特判掉 \(d=0\) 的情况,显然这种情况下满足条件的区间 \([l,r]\) 中的数必须相同,双针扫 ...
- P3722 [AH2017/HNOI2017]影魔(单调栈+扫描线+线段树)
题面传送门 首先我们把这两个贡献翻译成人话: 区间 \([l,r]\) 产生 \(p_1\) 的贡献当且仅当 \(a_l,a_r\) 分别为区间 \([l,r]\) 的最大值和次大值. 区间 \([l ...
- CF815D Karen and Cards 官方题解翻译
看到这道题,网上没有中文版的官方题解,于是就自己翻译了一遍. 不是机器翻译,是一个字一个字纯手翻译的,如果有错误欢迎指正. 比如我们有一张卡片,三个参数分别是 a1 = 4, b1 = 2, c1 = ...
- 【BZOJ4826】【HNOI2017】影魔(扫描线,单调栈)
[BZOJ4826][HNOI2017]影魔(扫描线,单调栈) 题面 BZOJ 洛谷 Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他 ...
- 【bzoj4540】[Hnoi2016]序列 单调栈+离线+扫描线+树状数组区间修改区间查询
题目描述 给出一个序列,多次询问一个区间的所有子区间最小值之和. 输入 输入文件的第一行包含两个整数n和q,分别代表序列长度和询问数.接下来一行,包含n个整数,以空格隔开,第i个整数为ai,即序列第i ...
- [JXOI2017]颜色 线段树扫描线 + 单调栈
---题面--- 题解: 首先题目要求删除一些颜色,换个说法就是要求保留一些颜色,那么观察到,如果我们设ll[i]和rr[i]分别表示颜色i出现的最左边的那个点和最右边的那个点,那么题目就是在要求我们 ...
- BZOJ 4826 [Hnoi2017]影魔 ——扫描线 单调栈
首先用单调栈和扫描线处理出每一个数左面最近的比他大的数在$l[i]$,右面最近的比他大的数$r[i]$. 然后就可以考虑每种贡献是在什么时候产生的. 1.$(l[i],r[i])$产生$p1$的贡献 ...
随机推荐
- [转]十个 iOS 面试问题
原文地址:http://onevcat.com/2013/04/ios-interview/ 不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术问题环节不仅是企业对应聘 ...
- Android学习笔记——保存文件(Saving Files)
本人邮箱:JohnTsai.Work@gmail.com,欢迎交流讨论. 欢迎转载,转载请注明网址:http://www.cnblogs.com/J ...
- 18 如何使用go来采集windows的基本硬件信息后发送到CMDB的服务器上
preface 之前我使用python写了cmdb采集的脚本,打包成exe的二进制文件后放在windows上执行,也达到了预期的效果. 但是最近部门要上open-falcon监控体系,每个服务器都要安 ...
- 9 云计算系列之Cinder的安装与NFS作为cinder后端存储
preface 在前面我们知道了如何搭建Openstack的keystone,glance,nova,neutron,horizon这几个服务,然而在这几个服务中唯独缺少存储服务,那么下面我们就学习块 ...
- sql server 2005 怎么看是不是企业版
已经安装了SQL server 2005 怎么确定它是企业版 还是标准版??? 执行sql:SELECT @@VERSION在结果里看,比如我这里是(里面有Enterprise Edition,表示企 ...
- php解析出带层级关系的mpp文件
本来要使用DHX gantt插件自带的API做导入,可是做完后,又发现不稳定,不能访问了 可能是屏蔽掉了 所以又想起可以使用javaBridge,借用java的MPXJ php解析mpp的 上一篇介绍 ...
- Windows上使用sqlite3
安装 去官网http://www.sqlite.org/download.html下载Windows下安装包,下载后,解压,设置环境变量 例如放在D:\sqlite3下,将D:\sqlite3加入环境 ...
- Java正则表达式的使用和详解(上)
1.匹配验证-验证Email是否正确 public static void main(String[] args) { // 要验证的字符串 String str = "service@xs ...
- 给树莓派安装看门狗的两种方法,二代B
树莓派的CPU是保护有硬件看门狗的,可以通过安装模块和值守程序来实现看门狗防止树莓派死机. 安装方法一:watchdog.sh的源码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- Python easyGUI 文件浏览 显示文件内容
#提供一个文件浏览夹.让用户选择需要打开的文件,打开并显示文件内容: import easygui as g import os msg='浏览文件并打开' title='测试' default='D ...