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

  笛卡尔树就是treap,于是考虑利用treap将其动态维护,将hi设为treap的优先级。移动下边界,可以发现每次相当于将所有点的优先级+1,并对该行出现的关键点将对应位置的优先级设为0,打打标记瞎维护下即可。由于数据随机复杂度很对。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 100010
#define lson tree[k].ch[0]
#define rson tree[k].ch[1]
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}
int n,r,c,root,cnt;
ll ans;
struct data
{int x,y;bool operator <(const data&a) const{return x<a.x;}
}a[N];
struct data2{int ch[2],x,p,s,lazy;ll ans;
}tree[N<<1];
void up(int k)
{tree[k].s=tree[lson].s+tree[rson].s+1;tree[k].ans=tree[lson].ans+tree[rson].ans+1ll*tree[k].p*(tree[lson].s+1)*(tree[rson].s+1);
}
void move(int &k,int p)
{int t=tree[k].ch[p];tree[k].ch[p]=tree[t].ch[!p],tree[t].ch[!p]=k,up(k),up(t),k=t;
}
void build(int &k,int l,int r)
{if (l>r) return;k=++cnt;int mid=l+r>>1;tree[k].x=mid,tree[k].p=0;build(lson,l,mid-1);build(rson,mid+1,r);up(k);
}
void update(int k,int x)
{tree[k].lazy+=x;tree[k].p+=x;tree[k].ans+=1ll*x*tree[k].s*(tree[k].s+1)/2;
}
void down(int k)
{update(lson,tree[k].lazy);update(rson,tree[k].lazy);tree[k].lazy=0;
}
void modify(int &k,int x)
{down(k);if (tree[k].x==x) tree[k].p=0;else if (tree[k].x<x) modify(rson,x),move(k,1);else modify(lson,x),move(k,0);up(k);
}
int main()
{
#ifndef ONLINE_JUDGEfreopen("bzoj2658.in","r",stdin);freopen("bzoj2658.out","w",stdout);const char LL[]="%I64d\n";
#elseconst char LL[]="%lld\n";
#endifr=read(),c=read(),n=read();for (int i=1;i<=n;i++) a[i].x=read(),a[i].y=read();ans=1ll*r*(r+1)*c*(c+1)/4;sort(a+1,a+n+1);build(root,1,c);int x=0;for (int i=1;i<=r;i++){update(root,1);while (a[x+1].x==i){x++;modify(root,a[x].y);}ans-=tree[root].ans;}cout<<ans;return 0;
}
//ans=Σpi*(sl+1)*(sr+1)

  

转载于:https://www.cnblogs.com/Gloid/p/10624878.html

BZOJ2658 ZJOI2012 小蓝的好友(treap)相关推荐

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

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

  2. [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 ...

  3. P2611-[ZJOI2012]小蓝的好友【Treap,扫描线】

    正题 题目链接:https://www.luogu.com.cn/problem/P2611 题目大意 r∗cr*cr∗c的网格上有nnn个标记点,然后求有多少个矩形包含至少一个标记点. 1≤r,c≤ ...

  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. 中国人民大学文继荣:搜索,从相关性到有用性
  2. python null byte_如何以“正确”的方式处理带有nullbytes的Python unicode字符串?
  3. android studio 设置 ndk 路径
  4. 机器学习笔记(二)逻辑回归和正则化
  5. 线程中start()与run()的区别
  6. mysql学时用什么类型_MYSQL数据库学习----MYSQL数据类型
  7. c++代码健壮性_复活Navex-使用图查询进行代码分析(上)
  8. java 课后习题 随机数统计
  9. Java_MD5的使用
  10. 【荐】纯CSS实现苹果MAC官方网站的菜单导航
  11. 量子计算机时空穿越,科学家用量子计算机模拟时间机器 人类能否回到过去?...
  12. 计算机派位志愿填报技巧,小升初电脑派位 填报也有技巧
  13. IP转换器 V2.6
  14. 如何把avi转换为mp4?视频转换用嗨格式视频转换器
  15. 竞业限制了不能做任何行业的相关联岗位,合理吗?
  16. GAT, Self Attention, Cross Attention对比以及在自动驾驶轨迹预测任务中的pytorch应用
  17. React-微信网页开发总结
  18. linux搭建dcm4chee和Ovm
  19. 深入理解布局约束 | 开发者说·DTalk
  20. Go--Redis快速入门指南

热门文章

  1. Python生成二维码-qrcode
  2. 电脑集显linux版本,Intel即将推出新的Linux驱动 核显性能最高可提升20%
  3. 计算机输入输出接口是交接界面,计算机组成原理试题1
  4. java scanner以回车结束_大佬看了直呼内行,你当初Java刚入门是否也是这样写代码?...
  5. concurrenthashmap_ConcurrentHashMap核心原理,这次彻底给整明白了
  6. java归并算法实例_Java编程中实现归并排序算法的实例教程
  7. CCPC-EDG专场——E.Buy and Delete
  8. php微信二次分享出错,解决微信二次分享bug
  9. 训练集、测试集loss容易出现的问题总结
  10. Codeforces Round #161 (Div. 2) B. Squares