正题

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


题目大意

r∗cr*cr∗c的网格上有nnn个标记点,然后求有多少个矩形包含至少一个标记点。

1≤r,c≤4×104,1≤n≤1051\leq r,c\leq 4\times 10^4,1\leq n\leq 10^51≤r,c≤4×104,1≤n≤105

保证数据随机


解题思路

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

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

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

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


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. 【BZOJ2658】[Zjoi2012]小蓝的好友(mrx) (扫描线,平衡树,模拟)

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

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

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

  3. [2021-09-02 contest]CF1251C,可达性统计(bitset优化dp),Boomerang Tournament(状压dp),小蓝的好友(mrx)(treap平衡树)

    文章目录 CF1251C Minimize The Integer acwing164:可达性统计 Facebook Hacker Cup 2016 Round 1 Boomerang Tournam ...

  4. bzoj 2656: [Zjoi2012]数列(sequence)(简单高精度模板2.0)

    2656: [Zjoi2012]数列(sequence) Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 1663  Solved: 860 [Subm ...

  5. 【ZJOI2012】【BZOJ2657】旅游(journey)

    Description 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个凸N边形来表示,N个顶点表示 ...

  6. Bzoj2656 [Zjoi2012]数列(sequence)

    Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 1448  Solved: 762 [Submit][Status][Discuss] Descript ...

  7. [bzoj2229][Zjoi2011]最小割

    来自FallDream的博客,未经允许,请勿转载,谢谢. 小白在图论课上学到了一个新的概念--最小割,下课后小白在笔记本上写下了如下这段话: "对于一个图,某个对图中结点的划分将图中所有结点 ...

  8. 【BZOJ2229】【ZJOI2011】最小割

    冷门知识点-- 原题: 小白在图论课上学到了一个新的概念--最小割,下课后小白在笔记本上写下了如下这段话: "对于一个图,某个对图中结点的划分将图中所有结点分成两个部分,如果结点s,t不在同 ...

  9. Python 微信机器人-通过wxpy库向指定名称的好友发送微信消息实例演示

    原来用的是 itchat 库,想向好友发送消息只能通过 UserName 这个关键词来发送,但是这个 UserName 每次重新登录后都是变的,根本没法定位到指定好友,一般好友的备注或微信名是 Nic ...

最新文章

  1. 机器学习(9)决策树(决策树分类鸢尾花)
  2. Spring Security OAuth 2开发者指南译
  3. 网络营销——网络营销专员表明网站地图助力网站收录进一步提升
  4. java 2wei shuzu_JavaScript 2维数组(JavaScript 2 dimension array)
  5. Linux 查看ERROR日志方法
  6. [UiAutomator] UiSelector中使用instance与index方法定位控件的区别
  7. web前端技术分享文档
  8. ai人工智能软件_在FuchsiaOS,AI助手和软件优化上
  9. Linux里安装ghostscript
  10. 两年嵌入式软件开发的工作感想
  11. 自定义typecho handsome主题标签云颜色
  12. 计算机英语教程作文,如何写好话题作文
  13. c语言if如何判断键盘输入是整数,利用if,else判断输入的是不是一个正整数
  14. 干货丨如何准确找到剪辑点?后期剪辑进阶必看
  15. 【java集合】ConcurrentHashMap源码分析
  16. sklearn决策树--泰坦尼克号幸存者预测
  17. Unity3D 片元NDC空间z值(ZBuffer)转View空间z值,公式推导
  18. 全景中的包围曝光和HDR应用
  19. 《比尔总动员》1——20级变强攻略之胶囊制作
  20. 【二 zedboard】PS和PL之间的交互

热门文章

  1. promise的状态以及api介绍_前端 api 请求缓存
  2. python能不能自动写代码_微软最强 Python 自动化工具开源了!不用写一行代码
  3. python导包路径问题_python的导包问题
  4. node 16位 转24位_同时将24位和32位BMP图像顺时针旋转90度
  5. c mysql binlog_Mysql Binlog
  6. 怎么打包图片_超简单的免费批量图片压缩技巧,只需3步
  7. linux中的ip地址范围,linux – ip地址范围参数
  8. oracle 12c 多线程,Oracle 12c(12.1)中性能优化功能增强之通过参数THREADED_EXECTION使用多线程模型...
  9. 《笨办法学python》6_笨办法学Python 习题 25: 更多更多的练习
  10. mysql设置表名字为占位符_这可能是把MySQL存储引擎讲解的最清楚的一篇文章了