bzoj 4237: 稻草人 cdq分治
求有多少个点对 其一个点为左下角 一个点为右下角所形成的矩形内部没有点 每个x与y都不同
一开始的思路:
先按照x坐标排序 进行cdq分治
然后在cdq内对y进行排序 枚举mid+1-r的点作为右上角的点
发现只要维护左半边的的单调递增就可以形成点对 用单调栈很好的维护
但是忽略了右半边已经遍历过的点对答案产生的影响
参考了yyb巨佬:https://www.cnblogs.com/cjyyb/p/8419102.ht
想一下新增点的x左边可以发现影响关系
![](/assets/blank.gif)
![](/assets/blank.gif)
#include<bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define repp(i,a,b) for(int i=(a);i>=(b);--i) #define ll long long #define see(x) (cerr<<(#x)<<'='<<(x)<<endl) #define inf 0x3f3f3f3f #define CLR(A,v) memset(A,v,sizeof A) / const int N=1e6+10; //维护单调递减的单调栈 int n,m;ll ans[N];ll sum; struct node{int x,y,id;}s[N]; bool cmp(node a,node b){return a.y>b.y;} bool cmpx(node a,node b){return a.x<b.x;} int sta1[N],top1,sta2[N],top2;void cdq(int l,int r) {if(l==r)return ;int mid=(l+r)>>1;cdq(l,mid);cdq(mid+1,r);int j=mid+1;sort(s+l,s+mid+1,cmp);sort(s+mid+1,s+r+1,cmp);int top1=top2=0;rep(i,l,mid){while(j<=r&&s[i].y<s[j].y){while(top1>0&&s[sta1[top1]].x>s[j].x)top1--;sta1[++top1]=j++;}while(top2>0&&s[sta2[top2]].x<s[i].x)top2--;sta2[++top2]=i;if(top2==1)sum+=1ll*top1;else {int L=1,R=top1,an=top1+1;while(L<=R){int mid=(L+R)>>1;if(s[sta1[mid]].y>s[sta2[top2-1]].y)L=mid+1;else an=mid,R=mid-1;}sum+=1ll*top1-an+1;}} } int main() {cin>>n;rep(i,1,n){scanf("%d%d",&s[i].x,&s[i].y);s[i].id=i;}sort(s+1,s+1+n,cmpx);cdq(1,n);cout<<sum;return 0; }
View Code
转载于:https://www.cnblogs.com/bxd123/p/11469329.html
bzoj 4237: 稻草人 cdq分治相关推荐
- bzoj 4237: 稻草人(CDQ分治+单调栈+二分)
4237: 稻草人 Time Limit: 40 Sec Memory Limit: 256 MB Submit: 1352 Solved: 594 [Submit][Status][Discus ...
- BZOJ#4237. 稻草人
4237: 稻草人 Time Limit: 40 Sec Memory Limit: 256 MB Submit: 1483 Solved: 649 [Submit][Status][Discus ...
- bzoj 4237: 稻草人
Description JOI村有一片荒地,上面竖着N个稻草人,村民们每年多次在稻草人们的周围举行祭典. 有一次,JOI村的村长听到了稻草人们的启示,计划在荒地中开垦一片田地.和启示中的一样,田地需要 ...
- ●BZOJ 4237 稻草人
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4237 题解: CDQ分治,单调栈 把所有点先按x从小到大排序,然后去CDQ分治y坐标. 在分 ...
- BZOJ 4285 使者 (CDQ分治+dfs序)
题目传送门 题目大意:给你一棵树,有三种操作,在两个点之间连一个传送门,拆毁一个已有的传送门,询问两个点之间的合法路径数量.一条合法路径满足 1.经过且仅经过一个传送门 2.不经过起点终点简单路径上的 ...
- bzoj 4237 稻草人
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4237 CDQ.然而却不会做. **分治的话,只要考虑两部分之间对答案的贡献就行了,不用考虑部 ...
- BZOJ4237 JOISC2014 稻草人 CDQ分治、单调栈
传送门 题意:给出平面上$N$个点,求满足以下两个条件的矩形:①左下角与右上角各有一个点:②矩形内部没有点.$N \leq 2 \times 10^5$,所有数字大于等于$0$,保证坐标两两不同 最开 ...
- AT1225 稻草人(cdq分治+二分)
题目链接 Link 思路分析 题目要求我们统计二维平面内的点所构成的不含其他点的矩形个数,因此想到 cdqcdqcdq 分治. 我们先按照横坐标递增排序,这样就只用考虑左下角在 [l,mid][l,m ...
- bzoj 1176 Mokia (cdq分治)
1176: [Balkan2007]Mokia Time Limit: 30 Sec Memory Limit: 162 MB Submit: 3874 Solved: 1742 [Submit] ...
最新文章
- Nature:肠道菌群代谢物调节肠道与免疫
- hdu3786 Floyd或搜索 水题
- Java技术小册(基础篇)
- MAC 下用GCC编译报错:“Undefined symbols for architecture x86_64: ”
- 使用beanShell来解析执行java的String方法,类似javascipt的eval方法
- 渗透测试专业术语——攻击篇
- android 设置组件背景图片,Android TextView背景颜色与背景图片设置
- 中国工商银行计算机专业笔试内容,中国工商银行的笔试一般考什么内容?
- 51单片机c语言程序执行顺序,51单片机程序执行流程详细分析
- python太阳代码_Python模拟太阳
- JS的组成-JS数组方法-JS函数-系统化学习
- Ubuntu下硬件信息的查看方式
- LeetCode 2315. 统计星号
- 前端开发者的专业度自查 100 条
- FHQ Treap 总结
- 一道简单的Python面试题,却涵盖诸多考点,快来试试吧!
- 弄底层基础的东西往往慢,枯燥,要慢慢磨
- 【Kelm分类】基于哈里斯鹰算法优化核极限学习机实现数据分类附matlab代码
- Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeExce
- COM劫持 BypassUAC