#平衡树#洛谷 2611 [ZJOI2012]小蓝的好友
题目
在 \(R\times C\) 的矩形中,问有多少个子矩形使得存在一个给定点在其中,
保证点随机,\(R,C\leq 4\times 10^4,n\leq 10^5\)
分析
考虑容斥,用总方案减去不含点的子矩形个数,
枚举上边界,那么左右边界可取的下边界取决于点的高度,
可以发现维护点的高度实际上是在维护一棵笛卡尔树,
方案的统计可以在笛卡尔树上进行,由于带修,直接用平衡树即可
代码
#include <cstdio>
#include <cctype>
#include <algorithm>
using namespace std;
const int N=100011; typedef long long lll;
struct rec{int x,y;}a[N]; lll ans,w[N],c[N];
int ke[N],siz[N],root,las=1,son[N][2],R,C,n,mx;
int iut(){
int ans=0; char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=ans*10+c-48,c=getchar();
return ans;
}
bool cmp(rec x,rec y){return x.x<y.x;}
int build(int l,int r){
if (l>r) return 0;
int mid=(l+r)>>1;
siz[mid]=r-l+1;
son[mid][0]=build(l,mid-1);
son[mid][1]=build(mid+1,r);
return mid;
}
void pup(int now){
siz[now]=siz[son[now][0]]+siz[son[now][1]]+1;
w[now]=w[son[now][0]]+w[son[now][1]]+1ll*ke[now]*(siz[son[now][0]]+1)*(siz[son[now][1]]+1);
}
void Split(int now,int kth,int &fi,int &se){
if (!now) {fi=se=0; return;}
if (kth>siz[son[now][0]]){
fi=now;
Split(son[now][1],kth-siz[son[now][0]]-1,son[now][1],se);
}else{
se=now;
Split(son[now][0],kth,fi,son[now][0]);
}
pup(now);
}
int Merge(int fi,int se){
if (!fi||!se) return fi|se;
if (ke[fi]>ke[se]){
son[fi][1]=Merge(son[fi][1],se);
pup(fi);
return fi;
}else{
son[se][0]=Merge(fi,son[se][0]);
pup(se);
return se;
}
}
void update(int x,int z){
int fi,se,th; Split(root,x-1,fi,se);
Split(se,1,se,th),w[se]=ke[se]=z;
root=Merge(Merge(fi,se),th);
}
int main(){
R=iut(),C=iut(),n=iut(),mx=R>C?R:C;
for (int i=1;i<=mx;++i) c[i+1]=c[i]+i;
for (int i=1;i<=n;++i) a[i]=(rec){iut(),iut()};
sort(a+1,a+1+n,cmp),root=build(1,C);
for (int l=1,r;l<=n;las=a[l].x,l=r){
ans+=(c[a[l].x]-c[las])*c[C+1]-w[root]*(a[l].x-las);
for (r=l;a[r].x==a[l].x;++r) update(a[r].y,a[l].x);
}
ans+=(c[R+1]-c[las])*c[C+1]-w[root]*(R+1-las);
return !printf("%lld",c[R+1]*c[C+1]-ans);
}
#平衡树#洛谷 2611 [ZJOI2012]小蓝的好友的更多相关文章
- 洛谷 P2611 [ZJOI2012]小蓝的好友 解题报告
P2611 [ZJOI2012]小蓝的好友 题目描述 终于到达了这次选拔赛的最后一题,想必你已经厌倦了小蓝和小白的故事,为了回馈各位比赛选手,此题的主角是贯穿这次比赛的关键人物--小蓝的好友. 在帮小 ...
- 【BZOJ2658】[Zjoi2012]小蓝的好友(mrx) 平衡树维护笛卡尔树+扫描线
[BZOJ2658][Zjoi2012]小蓝的好友(mrx) Description 终于到达了这次选拔赛的最后一题,想必你已经厌倦了小蓝和小白的故事,为了回馈各位比赛选手,此题的主角是贯穿这次比赛的 ...
- 【BZOJ2658】[Zjoi2012]小蓝的好友(mrx) (扫描线,平衡树,模拟)
题面 终于到达了这次选拔赛的最后一题,想必你已经厌倦了小蓝和小白的故事,为了回馈各位比赛选手,此题的主角是贯穿这次比赛的关键人物--小蓝的好友. 在帮小蓝确定了旅游路线后,小蓝的好友也不会浪费这个难得 ...
- [洛谷P2610] [ZJOI2012]旅游
洛谷题目链接:[ZJOI2012]旅游 题目描述 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个 ...
- [洛谷P2597] [ZJOI2012]灾难
洛谷题目链接:[ZJOI2012]灾难 题目描述 阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,如果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引 ...
- 洛谷 P2609 [ZJOI2012]数列 解题报告
P2609 [ZJOI2012]数列 题目描述 小白和小蓝在一起上数学课,下课后老师留了一道作业,求下面这个数列的通项公式: A(0)=0 A(1)=1 A(2i)=A(i) (对于任意 i>0 ...
- @bzoj - 2658@ [Zjoi2012]小蓝的好友(mrx)
目录 @description@ @solution@ @accepted code@ @details@ @description@ 终于到达了这次选拔赛的最后一题,想必你已经厌倦了小蓝和小白的故事 ...
- 洛谷 P2597 [ZJOI2012]灾难 解题报告
P2597 [ZJOI2012]灾难 题目描述 阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,如果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引发 ...
- 洛谷 P2173 [ZJOI2012]网络 解题报告
P2173 [ZJOI2012]网络 题目描述 有一个无向图G,每个点有个权值,每条边有一个颜色.这个无向图满足以下两个条件: 对于任意节点连出去的边中,相同颜色的边不超过两条. 图中不存在同色的环, ...
- AC日记——文艺平衡树 洛谷 P3391
文艺平衡树 思路: splay翻转操作模板: 虚拟最左最右端点,然后每次都把l翻转到root,r+2翻转到root的右节点: 然后在r+2的左节点上打标记: 标记需要在旋转,rank,print时下放 ...
随机推荐
- Direct2D CreateBitmap的使用
当需要设置位图的混合模式时,应该使用ID2D1DeviceContext而不是ID2D1RenderTarget. 代码如下: #define WIN32_LEAN_AND_MEAN #include ...
- macOS使用CodeRunner快速配置fortran环境
个人网站:xzajyjs.cn 由于一些项目的缘故,需要有fortran的需求,但由于是M1 mac的缘故,不能像windows那样直接使用vs+ivf这种经典配置.搜了一下网上主流的跨平台方案,主要 ...
- Android加载PDF方案(pdf.js,支持缩放)
都知道,Android本身的webview是不支持pdf加载的(比不上iOS的webview,谁让人家NB呢),因此通过连接Google的一个服务器转换成功后返回给WebView显示.但是,但是,但是 ...
- Mybatis模糊查询无法确定参数$1的数据类型: ERROR: could not determine data type of parameter $1
Mybatis模糊查询无法确定参数$1的数据类型: 报错ERROR: could not determine data type of parameter $1 修改前: SELECT count(0 ...
- context讲解
context包 context包介绍 在go语言中,每个独立调用一般都会被单独的协程处理.但在处理一个请求时,往往可能需要在多个协程之间进行信息传递,甚至包括一层层地递进顺序传递,而且这种信息往 ...
- 基于javaweb的个人音乐网站
一 .需求 ① 前台用户: 用户注册和登录以及完善个人资料: 添加好友功能(用户之间可通过发送好友申请添加好友,被添加人可以同意或拒绝好友申请): 下载歌曲功能(当用户点击下载按钮时,就能下载相对应的 ...
- Vue源码学习(十):关于dep和watcher使用的一些思考
好家伙, 前面想了好久,都没想明白为什么要dep和watcher打配合才能实现数据-视图同步 为什么要多一个依赖管理这样的东西 给每个数据绑个watcher(xxfunction),然后,数据变了 ...
- 如何运维多集群数据库?58 同城 NebulaGraph Database 运维实践
图计算业务背景介绍 我们为什么选择 NebulaGraph? 在公司各个业务线中,有不少部门都有着关系分析等图探索场景,随着业务发展,相关的需求越来越多.大量需求使用多模数据库来实现,开发成本和管理成 ...
- Android Handler实现子线程与子线程、主线程之间通信
一.子线程向主线程传值: 首选在主线程里创建一个Handler 1 Handler mHandler = new Handler(){ 2 @Override 3 public void handle ...
- Java instanceof 全小写 关键字使用
1 package com.bytezreo.duotai2; 2 3 import java.sql.Date; 4 5 /** 6 * 7 * @Description 面向对象的特征三 ---- ...