正题

题目链接:https://www.luogu.com.cn/problem/P2611


题目大意

\(r*c\)的网格上有\(n\)个标记点,然后求有多少个矩形包含至少一个标记点。

\(1\leq r,c\leq 4\times 10^4,1\leq n\leq 10^5\)

保证数据随机


解题思路

枚举下边界,考虑上面可行的范围,发现对于左右边界\([l,r]\),可行的上边界是\(\leq max\{a_i\}(i\in[l,r])\)

也就是一个\(a_i\)可以支配的范围是直到它左右边第一个比它大的区域,如果弄出\(a_i\)的笛卡尔树来可以很快实现。

要支持动态插入的笛卡尔树(这个东西显然不存在),转念一想,好像\(Treap\)就是一个支持插入的笛卡尔树?

但是时间复杂度无法保证...其实可以,因为\(Treap\)本来就是随机\(dat\)值来做笛卡尔树的,这里保证了数据随机,所以时间复杂度是\(O(n\log c)\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e5+10;
struct node{
ll x,y;
}a[N];
ll r,c,n,t[N][2],siz[N],w[N],dat[N],v[N],ans;
void PushUp(ll x){
siz[x]=siz[t[x][0]]+siz[t[x][1]]+1;
w[x]=dat[x]*(siz[t[x][0]]+1)*(siz[t[x][1]]+1);
v[x]=w[x]+v[t[x][0]]+v[t[x][1]];
return;
}
void zig(ll &x){
ll y=t[x][0];
t[x][0]=t[y][1];t[y][1]=x;x=y;
PushUp(t[x][1]);PushUp(x);return;
}
void zag(ll &x){
ll y=t[x][1];
t[x][1]=t[y][0];t[y][0]=x;x=y;
PushUp(t[x][0]);PushUp(x);return;
}
void Change(ll &x,ll pos,ll val){
if(x==pos){
dat[x]=val;
PushUp(x);return;
}
if(pos<x){
Change(t[x][0],pos,val);
if(dat[t[x][0]]>dat[x])zig(x);
}
else{
Change(t[x][1],pos,val);
if(dat[t[x][1]]>dat[x])zag(x);
}
PushUp(x);return;
}
bool cmp(node x,node y)
{return x.x<y.x;}
signed main()
{
scanf("%lld%lld%lld",&r,&c,&n);
for(ll i=1;i<=n;i++)
scanf("%lld%lld",&a[i].x,&a[i].y);
for(ll i=1;i<c;i++)t[i][1]=i+1,siz[i]=c-i+1;
sort(a+1,a+1+n,cmp);ll p=1,rt=1;siz[c]=1;
for(ll i=1;i<=r;i++){
while(p<=n&&a[p].x<=i){
Change(rt,a[p].y,a[p].x);
p++;
}
ans+=v[rt];
}
printf("%lld\n",ans);
return 0;
}

P2611-[ZJOI2012]小蓝的好友【Treap,扫描线】的更多相关文章

  1. 洛谷 P2611 [ZJOI2012]小蓝的好友 解题报告

    P2611 [ZJOI2012]小蓝的好友 题目描述 终于到达了这次选拔赛的最后一题,想必你已经厌倦了小蓝和小白的故事,为了回馈各位比赛选手,此题的主角是贯穿这次比赛的关键人物--小蓝的好友. 在帮小 ...

  2. 【BZOJ2658】[Zjoi2012]小蓝的好友(mrx) 平衡树维护笛卡尔树+扫描线

    [BZOJ2658][Zjoi2012]小蓝的好友(mrx) Description 终于到达了这次选拔赛的最后一题,想必你已经厌倦了小蓝和小白的故事,为了回馈各位比赛选手,此题的主角是贯穿这次比赛的 ...

  3. 【BZOJ2658】[Zjoi2012]小蓝的好友(mrx) (扫描线,平衡树,模拟)

    题面 终于到达了这次选拔赛的最后一题,想必你已经厌倦了小蓝和小白的故事,为了回馈各位比赛选手,此题的主角是贯穿这次比赛的关键人物--小蓝的好友. 在帮小蓝确定了旅游路线后,小蓝的好友也不会浪费这个难得 ...

  4. @bzoj - 2658@ [Zjoi2012]小蓝的好友(mrx)

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 终于到达了这次选拔赛的最后一题,想必你已经厌倦了小蓝和小白的故事 ...

  5. BZOJ2658 ZJOI2012 小蓝的好友(treap)

    显然转化为求不包含关键点的矩形个数.考虑暴力,枚举矩形下边界,求出该行每个位置对应的最低障碍点高度,对其建笛卡尔树,答案即为Σhi*(slson+1)*(srson+1),即考虑跨过该位置的矩形个数. ...

  6. bzoj2658: [Zjoi2012]小蓝的好友(mrx)

    太神辣 treap的随机键值竟然能派上用场.. 要用不旋转的treap来进行维护区间信息 #include<cstdio> #include<cstring> #include ...

  7. [ZJOI2012]小蓝的好友

    https://www.luogu.org/problemnew/show/P2611 题解 \(n\times m\)肯定过不去.. 我们把给定的点看做障碍点,考虑先补集转化为求全空矩阵. 然后我们 ...

  8. BZOJ 2658 小蓝的好友

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2658 题意:给出一个n*m的格子.某些格子中有障碍.求包含至少一个障碍的矩形有多少 ...

  9. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

随机推荐

  1. mysqldump备份总结

    常用的备份参数 -A 备份全库 -B 备某一个数据库下的所有表 -R, --routines 备份存储过程和函数数据 --triggers 备份触发器数据 --master-data={1|2} 告诉 ...

  2. Wpf程序显示在任务栏

    后台代码如下: using System; using System.Collections.Generic; using System.Drawing; using System.IO; using ...

  3. Servlet、ServletContext与ServletConfig的详解及区别

    Servlet.ServletContext与ServletConfig的详解及区别 一.Servlet详解 Servlet是一个interface,全局限定名:javax.servlet.Servl ...

  4. jQuery中的事件(八):on()、off()、bind()、unbind()、one()、hover()、hide()、show()、offset()等

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  5. java 方法参数的执行顺序

    java方法的参数的执行顺序是从左到右还是从右到左呢? 写出一下测试程序: 1 import java.util.*; 2 import java.io.*; 3 public class Test ...

  6. Go定时器--Timer

    目录 前言 Timer 定时器 简介 使用场景 1. 设定超时时间 2. 延迟执行某个方法 Timer对外接口 1. 创建定时器 2. 停止定时器 3. 重置定时器 其他接口 1. After() 2 ...

  7. C# - 音乐小闹钟_BetaV1.0

    时间:2017-11-20 作者:byzqy 介绍: 前段时间看到别人利用Timer控件实现了检查电脑本地时间,然后对时间进行比较,最终实现闹钟功能.感觉有点意思,于是自己也做了一个小闹钟! 先看一下 ...

  8. rasa 如何写一个故事

    设计故事 在设计故事时,需要考虑两组对话交互:快乐路径和不快乐路径.快乐路径描述用户何时按照您的预期遵循对话流程,并在出现提示时始终提供必要的信息.然而,用户经常会因为问题.闲聊或其他问题而偏离愉快的 ...

  9. 1day漏洞反推技巧实战(2)

    学习存货(2) CVE-2018-11784简单分析之反推的魅力 看着挺有趣的,简单分析下: 通过搜索tomcat漏洞找到: http://tomcat.apache.org/security-7.h ...

  10. k8s笔记0528-基于KUBERNETES构建企业容器云手动部署集群记录-6

    1.创建一个测试用的deployment [root@linux-node1 ~]# kubectl run net-test --image=alpine --replicas=2 sleep 36 ...