正题

题目链接: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. 怎样在自己的 Web 中加入强大的日志系统系统?slf4j 的日志插件必须要知道!

    对于程序猿来讲,一个应用程序的日志管理是极为重要的.因为,它可以帮助我们随时查看应用程序的运行状态.执行效果等信息,从而监控软件系统.或是根据日志信息解决一些重要的问题. 但是在 Java 应用程序中 ...

  2. Qt 中的属性系统(Property System)

    21 人赞同了该文章 本节内容主要讲解我对 Qt 属性系统的理解.官方文档参考 The Property System. 如何理解"属性系统"这个概念? 一般我们说一个类有什么属性 ...

  3. Jemeter压力测试

    Jmeter教程 简单的压力测试 Jmeter是一个非常好用的压力测试工具.  Jmeter用来做轻量级的压力测试,非常合适,只需要十几分钟,就能把压力测试需要的脚本写好. 转载自小坦克:https: ...

  4. 关于MYSQL5.7:Access denied for user 'root'@'localhost' (using password:YES)解决

    这一类解决要提供远程服务,需要进入mysql的my.ini文件中进行修改,但是在win10系统中,my.ini不再放在MYSQL安装目录的根目录中了,需要到一类应用缓存目录中寻找MYSQL的详细配置文 ...

  5. 使用dom4j工具:获取xml中的标签属性(三)

    package dom4j_read; import java.io.File; import java.util.List; import org.dom4j.Attribute; import o ...

  6. Reinforcement Learning 强化学习入门

    https://www.zhihu.com/question/277325426 https://github.com/jinglescode/reinforcement-learning-tic-t ...

  7. MySQL实战45讲(10--15)-笔记

    11 | 怎么给字符串字段加索引? 维护一个支持邮箱登录的系统,用户表是这么定义的: mysql> create table SUser( ID bigint unsigned primary ...

  8. MySQL——备份与恢复

    MySQL数据库备份和恢复 --备份类型: 1.热备份(只有InnoDB支持)(不影响业务,最好的方式) 2.冷备份( 阻止用户访问) 3.温备份 --备份方式: 1.逻辑备份(文本表示:SQL语句) ...

  9. 反射应用和获取Class对象的三种方式

    一.写一个"框架",可以创建任何对象运行任何方法 1.配置文件 2.使用类加载器ClassLoader,Properties集合是可以和IO流结合使用完成读取和写入数据的集合,方法 ...

  10. shell--目录通配符

    符号 说明 ? 匹配任一字符 * 匹配一个或多个字符 [a-z0-9] 类似于正则表达式, 若想匹配?可用[?] [!a-z] 类似于正则表达式[^a-z], 不匹配中括号中的内容 {string1, ...