原文链接https://www.cnblogs.com/zhouzhendong/p/8682572.html

题目传送门 - BZOJ4237

题意

  平面上有$n(n\leq 2\times 10^5)$个整点(坐标范围在$[0,10^9]$之间)。

  第$i$个点$p_i$的坐标是$(x_i,y_i)$。

  如果有一对点$p_i$和$p_j$,满足$x_i<x_j,y_i<y_j$,而且以这两个点为左下角和右上角所围城的矩形内不包含任何整点(边界上面不算),那么他们对答案的贡献为1。

  求答案。

题解

  对于$x$坐标分治,然后单调栈解决跨越中线两端的点的贡献即可。

  好像听好写的,不详细介绍了。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=200005;
struct Point{
int x,y;
void get(){
scanf("%d%d",&x,&y);
}
}p[N],q[N];
int n,Lstack[N],Rstack[N],Ltop,Rtop;
LL ans=0;
bool cmpx(Point a,Point b){
return a.x<b.x;
}
void solve(int xL,int xR,int L,int R){
if (L>=R)
return;
int xmid=(xL+xR)>>1,mid=R;
while (mid>=L&&p[mid].x>xmid)
mid--;
solve(xL,xmid,L,mid);
solve(xmid+1,xR,mid+1,R);
Ltop=Rtop=0;
Lstack[0]=Rstack[0]=0;
q[0].y=-1;
for (int i=L,l=L,r=mid+1;i<=R;i++)
if (r>R||(l<=mid&&p[l].y<=p[r].y)){
q[i]=p[l++];
while (Ltop>0&&q[Lstack[Ltop]].x<q[i].x)
Ltop--;
Lstack[++Ltop]=i;
/* int pos=Ltop,y;
for (int j=1<<18;j>0;j>>=1)
if (pos-j>0&&q[Lstack[pos-j]].x==q[i].x)
pos-=j;
y=q[Lstack[pos-1]].y+1;
pos=Rtop+1;
for (int j=1<<18;j>0;j>>=1)
if (pos-j>0&&q[Rstack[pos-j]].y>=y)
pos-=j;
ans+=Rtop-pos+1;*/
}
else {
q[i]=p[r++];
while (Rtop>0&&q[Rstack[Rtop]].x>q[i].x)
Rtop--;
Rstack[++Rtop]=i;
int pos=Rtop,y;
for (int j=1<<18;j>0;j>>=1)
if (pos-j>0&&q[Rstack[pos-j]].x==q[i].x)
pos-=j;
y=q[Rstack[pos-1]].y+1;
pos=Ltop+1;
for (int j=1<<18;j>0;j>>=1)
if (pos-j>0&&q[Lstack[pos-j]].y>=y)
pos-=j;
ans+=Ltop-pos+1;
}
for (int i=L;i<=R;i++)
p[i]=q[i];
}
int main(){
scanf("%d",&n);
for (int i=1;i<=n;i++)
p[i].get();
sort(p+1,p+n+1,cmpx);
solve(0,1e9,1,n);
printf("%lld\n",ans);
return 0;
}

  

BZOJ4237 稻草人 分治 单调栈的更多相关文章

  1. 【bzoj4237】稻草人 分治+单调栈+二分

    题目描述 JOI村有一片荒地,上面竖着N个稻草人,村民们每年多次在稻草人们的周围举行祭典. 有一次,JOI村的村长听到了稻草人们的启示,计划在荒地中开垦一片田地.和启示中的一样,田地需要满足以下条件: ...

  2. 【BZOJ4237】稻草人 [分治][单调栈]

    稻草人 Time Limit: 40 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description JOI村有一片荒地,上面竖着N个稻草 ...

  3. 【BZOJ4237】 稻草人 CDQ分治+单调栈

    ## 题目描述 JOI村有一片荒地,上面竖着N个稻草人,村民们每年多次在稻草人们的周围举行祭典. 有一次,JOI村的村长听到了稻草人们的启示,计划在荒地中开垦一片田地.和启示中的一样,田地需要满足以下 ...

  4. bzoj4237: 稻草人 cdq分治 单调栈

    目录 题目链接 题解 代码 题目链接 bzoj4237: 稻草人 题解 暴力统计是n^2的 考虑统计一段区间对另一端的贡献 对于y值cdq分治,降调一维 对于当前两个分治区间统计上面那部分对下面那部分 ...

  5. 【BZOJ4237】稻草人 cdq分治+单调栈+二分

    [BZOJ4237]稻草人 Description JOI村有一片荒地,上面竖着N个稻草人,村民们每年多次在稻草人们的周围举行祭典. 有一次,JOI村的村长听到了稻草人们的启示,计划在荒地中开垦一片田 ...

  6. [BZOJ4237]稻草人:CDQ分治+单调栈

    分析 按\(y\)排序后CDQ分治,可以发现每个点可以影响的是\(x\)坐标的一段区间,可以使用扫描线+单调栈,在单调栈上二分即可解决,时间复杂度\(O(n \log^2 n)\). 通过归并排序可以 ...

  7. bzoj 4237 稻草人 - CDQ分治 - 单调栈

    题目传送门 传送点I 传送点II 题目大意 平面上有$n$个点.问存在多少个矩形使得只有左下角和右上角有点. 考虑枚举左下角这个点.然后看一下是个什么情况: 嗯对,是个单调栈.但不可能暴力去求每个点右 ...

  8. Loj#2880-「JOISC 2014 Day3」稻草人【CDQ分治,单调栈,二分】

    正题 题目链接:https://loj.ac/problem/2880 题目大意 给出平面上的\(n\)个点,然后求有多少个矩形满足 左下角和右上角各有一个点 矩形之间没有其他点 \(1\leq n\ ...

  9. bzoj4237 稻草人——分治

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4237 分治: 先把所有点按 y 排序,然后二分递归: 对于每个 mid ,计算经过它的矩形的 ...

随机推荐

  1. Elasticsearch索引别名、Filtered索引别名、Template

    在使用elasticsearch的时候,经常会遇到需要淘汰掉历史数据的场景. 为了方便数据淘汰,并使得数据管理更加灵活,我们经常会以时间为粒度建立索引,例如: 每个月建立一个索引:monthly-20 ...

  2. Ex 2_16 给定一个无穷数组..._第二次作业

    先比较数组的A[0]元素,若不相等接下来比较A[1],A[2],A[4],A[8]…,若找到一个区间A[2n-1]<x<A[2n],再对这个区间进行折半查找操作.总的时间为O(logn). ...

  3. python读写csv文件

    文章链接:https://www.cnblogs.com/cloud-ken/p/8432999.html Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗 ...

  4. 【进阶1-3期】JavaScript深入之内存空间详细图解(转)

    这是我在公众号(高级前端进阶)看到的文章,现在做笔记 https://mp.weixin.qq.com/s/x4ZOYysb9XdT1grJbBMVkg 今天介绍的是JS内存空间,了解内存空间中的堆和 ...

  5. css3 曲线阴影,翘边阴影

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. JAVA图书管理系统汇总共27个

    好多人都在搜索图书管理系统,感觉这个挺受欢迎的,所以整理了一系列的图书管理系统,让大家选择.java图书馆管理系统[优秀毕业设计论文+源码]http://down.51cto.com/data/683 ...

  7. Confluence 6 配置默认语言界面

    Confluence 6 配置默认语言使用的界面. https://www.cwiki.us/display/CONFLUENCEWIKI/Choosing+a+Default+Language

  8. Confluence 6 升级自定义的站点和空间获得你的自定义布局

    我们建议你在对站点进行布局修改的时候,你需要为你修改的 Confluence 站点或空间布局保留所有的修改记录. 如果没有的话,你应该可以通过下面的办法找到你的自定义修改.这个方法将会把你对全部网站和 ...

  9. nginx官方模块之http_sub_module

    作用 http内容替换 语法 示例 html代码与结果如下:

  10. 1010:Tempter of the Bone

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010 Problem Description The doggie found a bone in a ...