稻草人(bzoj 4237)
Description
Input
Output
Sample Input
0 0
2 2
3 4
4 3
Sample Output
HINT

/*
网上说这是一道cdq分治
我们对于y坐标进行分治,对于某一段先按照x坐标排序,考虑上半部分对于下半部分的影响。
考虑上半部分某个点i,如果它能作为右上的点与下半部分的某个点形成长方形,那么必须保证在他们之间没有某个点j,使得x[j]<x[i]&&y[j]<y[i],画图可知,我们可以在上半部分维护一个y递增的单调栈,下半部分维护一个y递减的单调栈,这样能保证一一对应,然后二分求出第一个满足条件的坐标。
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#define N 200010
#define lon long long
using namespace std;
int n,p[N],q[N];lon ans;
struct node{int x,y;}a[N],b[N];
bool cmpy(const node&s1,const node&s2){return s1.y<s2.y;}
int find(int x,int l,int r){
while(l+<r){
int mid=l+r>>;
if(a[q[mid]].x<x) l=mid;
else r=mid;
}
return l;
}
void solve(int l,int r){
if(l==r)return;
int mid=l+r>>;
solve(l,mid);solve(mid+,r);
int tp1=,tp2=,i,j=l,k;
for(i=mid+;i<=r;i++){
while(tp1&&a[i].y<a[p[tp1]].y)tp1--;
p[++tp1]=i;
for(;a[j].x<a[i].x&&j<=mid;j++){
while(tp2&&a[j].y>a[q[tp2]].y)tp2--;
q[++tp2]=j;
}
ans+=tp2-find(a[p[tp1-]].x,,tp2+);
}
j=l;k=mid+;
for(i=l;i<=r;i++)
b[i]=((j<=mid&&a[j].x<a[k].x)||k>r)?a[j++]:a[k++];
for(i=l;i<=r;i++)a[i]=b[i];
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d%d",&a[i].x,&a[i].y);
sort(a+,a+n+,cmpy);
solve(,n);
cout<<ans;
return ;
}
稻草人(bzoj 4237)的更多相关文章
- bzoj 4237 稻草人 - CDQ分治 - 单调栈
题目传送门 传送点I 传送点II 题目大意 平面上有$n$个点.问存在多少个矩形使得只有左下角和右上角有点. 考虑枚举左下角这个点.然后看一下是个什么情况: 嗯对,是个单调栈.但不可能暴力去求每个点右 ...
- bzoj 4237: 稻草人 -- CDQ分治
4237: 稻草人 Time Limit: 40 Sec Memory Limit: 256 MB Description JOI村有一片荒地,上面竖着N个稻草人,村民们每年多次在稻草人们的周围举行 ...
- bzoj 4237: 稻草人
Description JOI村有一片荒地,上面竖着N个稻草人,村民们每年多次在稻草人们的周围举行祭典. 有一次,JOI村的村长听到了稻草人们的启示,计划在荒地中开垦一片田地.和启示中的一样,田地需要 ...
- ●BZOJ 4237 稻草人
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4237 题解: CDQ分治,单调栈 把所有点先按x从小到大排序,然后去CDQ分治y坐标. 在分 ...
- bzoj 4237 稻草人 CDQ
稻草人 Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 1433 Solved: 626[Submit][Status][Discuss] Descr ...
- bzoj 4237稻草人
按x轴进行分治,将[l,r]分成[l,mid]和[mid+1,r],左下角点x值在[l,mid]中,右上角点x值在[mid+1,r],然后将[l,r]中的所有点按y轴排序,按顺序扫描,若扫描到左下角点 ...
- bzoj 4237 稻 草 人
bzoj 这个矩形有三个限制,分别是右上角点的横纵坐标分别大于左下角废话,并且中间区域没有点.那么可以先按横坐标排序,然后枚举左边的点和右边的点匹配.为了保证复杂度,这里每次把点集一分为二,先递归处理 ...
- BZOJ 4236~4247 题解
BZOJ 4236 JOIOJI f[i][0..2]表示前i个字符中′J′/′O′/′I′的个数 将二元组<f[i][0]−f[i][1],f[i][1]−f[i][2]>扔进map,记 ...
- $CDQ$分治总结
A.\(CDQ\) 分治 特别基础的教程略. \(CDQ\)分治的优缺点: ( 1 )优点:代码量少,常数极小,可以降低处理维数. ( 2 )缺点:必须离线处理. \(CDQ\)分治与其他分治最本质的 ...
随机推荐
- codevs 1115 开心的金明
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房 ...
- ARC和MRC混合模式下的编译问题
在一个支持ARC (Automatic Reference Counting)的项目中,有时候需要禁止其中几个文件使用ARC模式编译(比如你用了第三方不支持ARC的类库).这时就要点击工程文件,在ta ...
- SublimeREPL配置Python3开发
首先什么是REPL? A Read-Eval-Print-Loop (REPL) is available both as a standalone program and easily includ ...
- 前端知识点总结——HTML
HTML:HTML4.01 指的就是网页技术HTML5:HTML4.01的升级版本 1.web的基础知识 web与Internet1.Internet:全球性的计算机互联网络,因特网,互联网,交互网2 ...
- Burpsuite1.7.03网站渗透神器最新破解版
众所周知,Burp Suite是响当当的web应用程序渗透测试集成平台.从应用程序攻击表面的最初映射和分析, 到寻找和利用安全漏洞等过程,所有工具为支持整体测试程序而无缝地在一起工作. 平台中所有工具 ...
- CPP-网络/通信:WebService
工具:vc2003 //引入相关头文件,连接动态库,定义全局变量. //***************************************************** #include & ...
- PAT (Basic Level) Practise (中文)-1034. 有理数四则运算(20)
PAT (Basic Level) Practise (中文)-1034. 有理数四则运算(20) http://www.patest.cn/contests/pat-b-practise/1034 ...
- getBean(class )并发下性能较差,有锁.
spring 版本3.1.2 1. spring 并没有缓存 class -> beanDifinition 或者 sington 实例的缓存. 2. 只能先获取所有的beanDifitions ...
- 个人总结NDIS中NDIS_PACKET,NDIS_BUFFER的关系
// // NDIS_PACKET结构的定义 // typedef struct _NDIS_PACKET { NDIS_PACKET_PRIVATE Private; //这个其实是一个链表结构,P ...
- ios多线程NSThread
1.简介: 1.1 iOS有三种多线程编程的技术,分别是: 1..NSThread 2.Cocoa NSOperation (iOS多线程编程之NSOperation和NSOperationQueue ...