#平衡树#洛谷 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时下放 ...
随机推荐
- CentOS 8安装RabbitMQ
第一步:安装yum仓库 导入签名KEY: ## primary RabbitMQ signing key ## 这一步如果因为网络问题下载不成功,可以先将签名文件下载下来,本地导入 rpm --imp ...
- CSDN的Markdown编辑器使用说明
这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一 ...
- windows下的批处理bat文件和Linux下的shell文件的含义
原文:https://www.cnblogs.com/caiguodong/p/10308255.html shell(Linux.Solaris) bat(windows) 含义 # rem 注释行 ...
- PMP考试之【PMBOK(第六版)49个过程及ITTO】
- 第122篇: JS函数一些基本概念
好家伙,本篇为<JS高级程序设计>第十章"函数"学习笔记 1.函数的三种定义方式:函数表达式.函数声明及箭头函数 函数声明: function sum(a) { ret ...
- 【Azure 应用服务】在创建App Service时,遇见“No available instances to satisfy this request. App Service is attempting to increase capacity.”错误
问题描述 在创建新的App Service,遇见了资源不满足当前需求的提示.详细消息为: "Code": "Conflict","Message&qu ...
- 【Azure 应用程序见解】在Docker中运行的ASP.NET Core应用如何开启Application Insights的Profiler Trace呢?
问题描述 使用Azure Application Insights收集AKS中ASP.NET Core应用的监控数据,自动收集请求的Trace情况,用于分析单个请求在应用内部的耗时及处理事件情况,参考 ...
- 【Azure Redis 缓存】Azure Cache for Redis 是否记录具体读/写(Get/Set)或删除(Del)了哪些key呢?
问题描述 在Azure Redis的门户活动日志中,可以查看到的是对于Redis资源本身的操作.但是对于客户端连接到Redis服务后,对服务所做出的读写,或删除操作,是否有日志可以查看到呢? 问题回答 ...
- Java 抽象类 练习
1 package com.bytezreo.template; 2 3 import java.util.Calendar; 4 import java.util.Scanner; 5 6 /** ...
- 子序列&子串
子序列:子序列就是在原来序列中找出一部分组成的序列 子序列不一定连续 子串:字符串中任意个连续的字符组成的子序列称为该串的子串 子串一定连续