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

正题

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


题目大意

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

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

保证数据随机


解题思路

枚举下边界,考虑上面可行的范围,发现对于左右边界[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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

上学要迟到了【最短路转化】

上学要迟到了 题目 牛牛早上起床一看&#xff0c;自己睡过了&#xff0c;赶紧起床准备去学校&#xff0c;他去学校只有两种方式&#xff0c;坐公交车和步行&#xff0c;牛牛去学校是一条直线&#xff0c;这条直线上总共有 nnn 个车站&#xff0c;车站之间的距离都是相等的&am…

Microsoft Tech Summit 2018 课程简述:利用 Windows 新特性开发出更好的手绘视频应用...

概述Microsoft Tech Summit 2018 微软技术暨生态大会将于10月24日至27日在上海世博中心举行&#xff0c;这也会是国内举办的最后一届 Tech Summit&#xff0c;2019 年开始会以 Microsoft Ignite Tour 的形式出现&#xff0c;大家可以在官网查看本次会议信息&#xff1a;https:/…

牛牛和牛可乐的赌约

来源&#xff1a;牛客网&#xff1a; 牛牛和牛可乐的赌约 时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld 题目描述 牛可乐发明了一种n面骰子&#xff08;点数分别从1{}1到{}nn&…

【结论】友谊序列

题目大意 有两个大小为n的数组a,b&#xff08;所有数互不相等&#xff0c;且大于0&#xff09;&#xff0c;a,b中的数组成集合S&#xff0c;问可以构成aixorbj∈Sa_i\ xor\ b_j\in Sai​ xor bj​∈S的数对(i,j)的方案数的奇偶性 解题思路 若aixorbjaka_i\ xor\ b_ja_kai​ x…

GitHub 发布 2018 年开源项目趋势预测

Github 发布了一篇博客&#xff0c;预测了 2018 年开源项目的发展趋势&#xff0c;这些趋势可以帮助开发人员在共享知识的同时&#xff0c;寻求方法简化流程&#xff0c;并 get 新技能。去年&#xff0c;Github 有来自将近 200 个国家的 2400 万的开发者聚集在一起&#xff0c;…

YbtOJ#652-集合比较【Treap】

正题 题目链接:http://www.ybtoj.com.cn/problem/652 题目大意 定义一个元素为一个有序集合包含两个元素C{A,B}C\{A,B\}C{A,B} 集合C{A,B}C\{A,B\}C{A,B}的大小以AAA为第一关键字&#xff0c;BBB为第二关键字比较大小。 开始有两个元素S{S,S},T{T,T}S\{S,S\},T\{T,T\}S{S,S},…

牛牛和牛可乐的赌约2

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 牛牛感觉在上一次赌约中&#xff0c;情况对于自己非常不利&#xff0c;所以决定再赌一…

【线段树】二进制

题目大意 有一个二进制数&#xff0c;让你进行以下操作&#xff1a; 将一个区间的数字按升/降序排列查询一个区间的数字构成的数 解题思路 可以用线段树来维护每一位&#xff0c;预处理出2的整次幂&#xff0c;上传时把左儿子乘上右儿子长度次幂即可 code #include<cstd…

Codeforces Round #676 (Div. 2) E待补

“楼下一个男人病得要死&#xff0c;那间隔壁的一家唱着留声机&#xff0c;对面是弄孩子。楼上有两人狂笑&#xff1b;还有打牌声。河中的船上有女人哭着她死去的母亲。人类的悲欢并不相通&#xff0c;我只觉得他们吵闹。” A - XORwice 把a和b看成二进制数处理&#xff0c;不…

YbtOJ#883-最大的割【带修线性基】

正题 题目链接:http://www.ybtoj.com.cn/contest/118/problem/3 解题思路 给出nnn个点&#xff0c;mmm次动态插入一条无向边询问&#xff1a;割掉一些边使得图中至少两点不连通&#xff0c;并且割掉的边异或和最大。 询问之间相互独立 1≤n≤500,1≤m≤10001\leq n\leq 500,…

.NETCore 简单且高级的库 csredis v3.0.0

前言.NETCore 从1.0发布历经坎坷&#xff0c;一开始各种库缺失到现在的部分完善&#xff0c;走到今天实属不易。比如 redis-cli SDK 简直是坑出不穷。过去 .net 最有名望的 ServiceStack.Redis 早已沦为商业用途&#xff0c;在 .NETCore 中使用只能充值&#xff1b;后来居上的 …

1003 Express Mail Taking

题意&#xff1a; 有m个快递&#xff0c;放在n个快递柜里&#xff08;成顺序排布&#xff09;&#xff0c;从1号快递柜出发&#xff0c;每次要先到k号快递柜输入密码&#xff0c;然后才可以取指定的快递柜取货品&#xff0c;都取完后再回起点&#xff0c;问最短距离是多少 题…

序列区间

题目大意 给你n个数&#xff0c;问你有多少个区间满足∏ilrai∑ilraik\frac{\prod_{il}^r a_i}{\sum_{il}^r a_i}k∑ilr​ai​∏ilr​ai​​k 解题思路 原始等同于∏ilraik⋅∑ilrai\prod_{il}^r a_ik\cdot\sum_{il}^r a_i∏ilr​ai​k⋅∑ilr​ai​ 先枚举起点&#xff0c;…

github开源项目免费使用Azure PipeLine

微软收购Github后,很多人猜想微软可能会砍掉VSTS,然而事实VSTS并没有砍掉,关于Azure Devops的详细信息可以查看 这篇博客,如果想查看原文也可以从链接里提供的原始地址里查看.今天要介绍的是做Azure devops的ci部分:Azure Pipeline. VSTS升级到Azure Devops之后对开源开发者带来…

YbtOJ#752-最优分组【笛卡尔树,线段树】

正题 题目链接:http://www.ybtoj.com.cn/problem/752 题目大意 nnn个人&#xff0c;每个人有cic_ici​和did_idi​分别表示这个人所在的队伍的最少/最多人数。 然后要求将这些人分成编号连续的若干队使得队伍最多&#xff0c;并且求分队方案数。 1≤n≤1061\leq n\leq 10^61≤…

牛客小白月赛 27部分题解

已做BCDEFGJ B.乐团派对 刚开始想了个贪心&#xff0c;结果不对然后直接转头想dp了。 将能力值排序。 首先我们先分出来一组&#xff0c;能力值最大的分出来一组人数是ana_nan​即下标是n−an1→nn-a_n1\to nn−an​1→n分出来一组&#xff0c;目前还剩n−ann-a_nn−an​个人…

如何向微软 Docs 和本地化社区提交翻译贡献

Docs &#xff08;docs.microsoft.com&#xff09;是微软新版的文档网站&#xff0c;重新规划了各项技术栈的文档结构&#xff0c;看起来比 MSDN 可读性更好。虽然 Docs 提供了各种语言的版本&#xff0c;但大多是机器翻译&#xff0c;某些中文文档基本读不下去。因此微软鼓励社…

【线段树】生日

题目大意 给你一个序列&#xff0c;让你进行以下操作&#xff1a; 修改一个区间的数查询区间不同数字个数 解题思路 因为数字个数很少&#xff0c;可以直接用bitset存&#xff0c;然后套线段树 code #include<bitset> #include<cstdio> #include<cstring>…

ICPC 2019-2020 North-Western Russia Regional Contest 补题部分

已做A、M&#xff0c;E和H思路已经有了没调AC 已补BEJH 最终已完成ABEJHM B - Bad Treap 大佬题解 感觉这题就很玄学。。。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<c…

【dfs】数字

题目大意 给出x&#xff0c;问你不小于x&#xff0c;且由相同个数的4和7组成的最小的数 解题思路 对于奇数位和大于当前位数最大数的直接特判掉 对于其他的dfs枚举&#xff0c;因为如果一个位置放得比原数大&#xff0c;那么后面的都确定了&#xff0c;所以是O(n)的 code #…