BZOJ2658 [Zjoi2012]小蓝的好友(mrx)
来源:互联网 发布:php 自动化部署工具 编辑:程序博客网 时间:2024/05/15 23:46
神tm的题
考虑计算总矩形数减没黑点的矩形数
总矩形数等于对行随便选一个子区间的方案数乘以对列随便选一个子区间的方案数,是不是就我这种傻逼写完了程序发现不太会算这个东西-_-
考虑枚举每一行,然后计算每一列上边最多能延伸多少没有黑点,记为h
这样的话我们按列的标号构建一颗treap,并且以h作为堆优先级关键字
因为数据随机所以每个点随机性都是一样的,那么树高就是期望log的
那么每次就相当于整体把h加一,还有单点把h变成0操作
由于每个点都满足儿子的h大于等于自己的h,那么维护答案就比较方便了,具体可看ud函数,不过貌似我写的比较麻烦
#include<iostream>#include<cstring>#include<ctime>#include<cmath>#include<algorithm>#include<iomanip>#include<cstdlib>#include<cstdio>#include<map>#include<bitset>#include<set>#include<stack>#include<vector>#include<queue>using namespace std;#define MAXN 100010#define MAXM 1010#define ll long long#define eps 1e-8#define MOD 1000000007#define INF 1000000000struct pt{int x;int y;friend bool operator <(pt x,pt y){return x.x<y.x;}};int N,M,n;pt p[MAXN];int son[MAXN][2];ll ch[MAXN],siz[MAXN],v[MAXN],c[MAXN],h[MAXN],vh[MAXN];int rt;ll ans;inline void toch(int x,int y){if(!x){return ;}ch[x]+=y;h[x]+=y;vh[x]+=y*v[x];}inline void pd(int x){if(ch[x]){toch(son[x][0],ch[x]);toch(son[x][1],ch[x]);ch[x]=0;}}inline void ud(int x){siz[x]=siz[son[x][0]]+siz[son[x][1]]+1;c[x]=siz[x]+siz[son[x][0]]*siz[son[x][1]];v[x]=v[son[x][0]]+v[son[x][1]]+c[x];vh[x]=vh[son[x][0]]+vh[son[x][1]]+c[x]*h[x];}void down(int &x,int y){pd(x);if(x==y){h[x]=0;ud(x);return ;}if(y<x){down(son[x][0],y);int t=son[x][0];if(h[son[x][0]]<h[x]){son[x][0]=son[t][1];son[t][1]=x;ud(x);x=t;}}else{down(son[x][1],y);int t=son[x][1];if(h[son[x][1]]<h[x]){son[x][1]=son[t][0];son[t][0]=x;ud(x);x=t;}}ud(x);}int main(){int i;scanf("%d%d%d",&N,&M,&n);ans=(ll)N*(N+1)/2*M*(M+1)/2;for(i=1;i<=n;i++){scanf("%d%d",&p[i].x,&p[i].y);}sort(p+1,p+n+1);for(i=1;i<=M;i++){son[i][0]=i-1;siz[i]=i;ud(i);}rt=M;int wzh=1;for(i=1;i<=N;i++){toch(rt,1);while(p[wzh].x==i){down(rt,p[wzh++].y);}ans-=vh[rt];}printf("%lld\n",ans);return 0;}/*5 5 41 22 33 54 1*/
0 0
- bzoj2658: [Zjoi2012]小蓝的好友(mrx)
- bzoj2658: [Zjoi2012]小蓝的好友(mrx)
- BZOJ2658 [Zjoi2012]小蓝的好友(mrx)
- 【ZJOI2012】小蓝的好友(mrx)
- bzoj 2658: [Zjoi2012]小蓝的好友(mrx) Treap
- BZOJ 2658 [Zjoi2012]小蓝的好友(mrx)
- [bzoj2658]小蓝的好友
- [Treap 笛卡尔树 扫描线 补集转化] BZOJ 2658 [Zjoi2012]小蓝的好友(mrx)
- bzoj 2658: [Zjoi2012]小蓝的好友(mrx) treap+扫描线
- 发现校内网好友买卖的一个小漏洞!并成功实现自动好友买卖!
- 通过QQ小秘书与任意好友聊天的源程序
- 获取QQ所有在线好友IP的小技巧
- 微信好友名字里加入小图标的方法
- 【小白的CFD之旅】03 老蓝
- [BZOJ2657][Zjoi2012]旅游(journey) 树的直径
- [BZOJ 2657][Zjoi2012]旅游(journey):树的直径
- 一个好友的收藏。小洪(洪承煜),不打招呼就转载一下罗,呵呵
- 微信的两个小功能------“摇一摇搜歌”和“雷达加好友”确实打动了我
- Android微信自动回复功能
- 微信自动回复和自动抢红包实现原理(一):AccessibilityService的介绍和配置
- 微信自动回复和自动抢红包实现原理(二):自动回复
- 微信自动回复和自动抢红包实现原理(三):自动抢红包
- BZOJ1043 [HAOI2008]下落的圆盘
- BZOJ2658 [Zjoi2012]小蓝的好友(mrx)
- Docker存储驱动之Btrfs简介
- 历届试题 约数倍数选卡片
- 微软开源 AirSim,训练无人机和无人车
- hdu5606 tree 并查集
- 科技也能这么酷:无人驾驶轮椅要来啦
- PHP 杂项知识点
- Java之字符
- IDEA使用手册