【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 单调栈+扫描线的更多相关文章

  1. CF815D Karen and Cards

    CF815D Karen and Cards 固定一维c,然后(a,b)看成坐标,矩形区域求交 1.Segment tree Beats! 2.改成不合法的区域就是求并,c反向枚举,区域只增不减且完全 ...

  2. 【BZOJ4826】[Hnoi2017]影魔 单调栈+扫描线

    [BZOJ4826][Hnoi2017]影魔 Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样的灵魂,包括诗人.牧师.帝 ...

  3. Codeforces 407E - k-d-sequence(单调栈+扫描线+线段树)

    Codeforces 题面传送门 & 洛谷题面传送门 深感自己线段树学得不扎实-- 首先特判掉 \(d=0\) 的情况,显然这种情况下满足条件的区间 \([l,r]\) 中的数必须相同,双针扫 ...

  4. P3722 [AH2017/HNOI2017]影魔(单调栈+扫描线+线段树)

    题面传送门 首先我们把这两个贡献翻译成人话: 区间 \([l,r]\) 产生 \(p_1\) 的贡献当且仅当 \(a_l,a_r\) 分别为区间 \([l,r]\) 的最大值和次大值. 区间 \([l ...

  5. CF815D Karen and Cards 官方题解翻译

    看到这道题,网上没有中文版的官方题解,于是就自己翻译了一遍. 不是机器翻译,是一个字一个字纯手翻译的,如果有错误欢迎指正. 比如我们有一张卡片,三个参数分别是 a1 = 4, b1 = 2, c1 = ...

  6. 【BZOJ4826】【HNOI2017】影魔(扫描线,单调栈)

    [BZOJ4826][HNOI2017]影魔(扫描线,单调栈) 题面 BZOJ 洛谷 Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他 ...

  7. 【bzoj4540】[Hnoi2016]序列 单调栈+离线+扫描线+树状数组区间修改区间查询

    题目描述 给出一个序列,多次询问一个区间的所有子区间最小值之和. 输入 输入文件的第一行包含两个整数n和q,分别代表序列长度和询问数.接下来一行,包含n个整数,以空格隔开,第i个整数为ai,即序列第i ...

  8. [JXOI2017]颜色 线段树扫描线 + 单调栈

    ---题面--- 题解: 首先题目要求删除一些颜色,换个说法就是要求保留一些颜色,那么观察到,如果我们设ll[i]和rr[i]分别表示颜色i出现的最左边的那个点和最右边的那个点,那么题目就是在要求我们 ...

  9. BZOJ 4826 [Hnoi2017]影魔 ——扫描线 单调栈

    首先用单调栈和扫描线处理出每一个数左面最近的比他大的数在$l[i]$,右面最近的比他大的数$r[i]$. 然后就可以考虑每种贡献是在什么时候产生的. 1.$(l[i],r[i])$产生$p1$的贡献 ...

随机推荐

  1. 关于微博开放平台Oauth2.0接入网站应用

    关于什么是微博开放平台及微博开放平台能做什么,咱就不做搜索引擎的搬运工了 这里直接给个链接介绍:微博开放平台 本文只是抛砖引玉,讲讲微博开放平台的基本用法,适合没接触过开放平台的朋友入门学习,老鸟就略 ...

  2. 【ML】人脸识别

    https://github.com/colipso/face_recognition https://medium.com/@ageitgey/machine-learning-is-fun-par ...

  3. python 在windows 中文显示

    今天看到mechanize,在网上找例子实验,发现只要代码里出现中文,就会报错 SyntaxError: Non-ASCII character , but no encoding declared; ...

  4. 小波变换——子带编码,Subband Coding

    离散小波变换.多级信号分解,多分辨率分析. Multiresolution Analysis(MRA.多分辨率分析) 子带编码(Subband Coding) 简称SBC. 一种以信号频谱为依据的编码 ...

  5. python字符串 分片索引

    字符串是字符的有序集合,可以通过其位置来获得具体的元素.在python中,字符串中的字符是通过索引来提取的,索引从0开始. python可以取负值,表示从末尾提取,最后一个为-1,倒数第二个为-2,即 ...

  6. 跨域、跨服务器调用时候session丢失的问题

    最近新进一个公司,做的项目是手机支付系统.由于涉及到金钱相关的,所以安全性要求特别的高.项目分了很多个子系统,在部署(测试)的时候是每个Tomcat上面只放一个子系统.比如现在有5个子系统,那么就会对 ...

  7. docker开启api端口,docker启用加速

    此篇是针对centos6的docker,注意ubantu和centos7的会有区别. 需要在docker配置文件中修改信息 centos中是这个文件 /etc/sysconfig/docker,Ubu ...

  8. Struts2_day01讲义_使用Struts2完成客户列表显示的功能

  9. eclipse 安装 ndk 组件

    新安装的eclipse没有ndk组件, 我使用的安装包是:android-ndk32-r10b-windows-x86_64.zip,打开preferences如下

  10. Maven发布war包到Tomcat

    一.修改Tomcat下配置文件tomcat-users.xml,然后启动 <role rolename="manager-gui"/> <role rolenam ...