[GX/GZOI2019]特技飞行(扫描线+置换)
感觉是6题中最难的一题,其实这题是一个二合一:
第一问:给定平面上若干点和k个关键点,关键点覆盖一个45°倾斜的正方形范围r,求有多少点被至少一个关键点覆盖。这个可以曼哈顿转切比雪夫距离,然后再扫描线求解,复杂度O(nlogn)
第二问:求最少和最多有多少次擦肩而过。显然每个交点都可以做对向交换,这是最少擦肩而过的次数。最多的次数,假设全部擦肩而过得到排列p,对向交换实际上是交换两元素位置,用最小交换次数还原排列即可。
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int>pii;
const int N=5e5+;
int n,m,a,b,c,x0,x1,ans1,ans2,tot,cnt,ans,C[N<<],y[N][],f[N],vis[N];
double d[N<<];
set<pii>S;
struct node{double x,y;int v,p;}p[N<<];
bool operator<(node a,node b){return a.x<b.x;}
node calc(int i,int j)
{
int y1=y[j][]-y[i][],y2=y[i][]-y[j][];
double k=1.0*y1/(y1+y2),xl=1.0*x0+k*(x1-x0),yl=1.0*y[i][]+k*(y[i][]-y[i][]);
d[++cnt]=xl-yl;
return(node){xl+yl,xl-yl,,};
}
bool cmp(node a,node b){return fabs(a.x-b.x)<1e-?a.y<b.y:a.x<b.x;}
void add(int x,int v){while(x<=cnt)C[x]+=v,x+=x&-x;}
int query(int x){int ret=;while(x)ret+=C[x],x-=x&-x;return ret;}
bool cmp1(int a,int b){return y[a][]<y[b][];}
int main()
{
scanf("%d%d%d%d%d%d",&n,&a,&b,&c,&x0,&x1);
for(int i=;i<=n;i++)scanf("%d",&y[i][]);
for(int i=;i<=n;i++)scanf("%d",&y[i][]);
for(int i=;i<=n;i++)
{
pii u=make_pair(y[i][],i);
set<pii>::iterator it=S.lower_bound(u);
while(it!=S.end())p[++tot]=calc(it->second,i),it++;
S.insert(u);
}
int sum=tot;scanf("%d",&m);
for(int i=,x,y,z;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
d[++cnt]=x-y+z,d[++cnt]=x-y-z;
p[++tot]=(node){x+y+z,x-y+z,,};
p[++tot]=(node){x+y+z,x-y-z,-,};
p[++tot]=(node){x+y-z,x-y+z,-,};
p[++tot]=(node){x+y-z,x-y-z,,};
}
sort(p+,p+tot+);
sort(d+,d+cnt+);
cnt=unique(d+,d+cnt+)-d-;
for(int i=;i<=tot;i++)p[i].p=upper_bound(d+,d+cnt+,p[i].y-1e-)-d;
sort(p+,p+tot+,cmp);
for(int i=;i<=tot;i++)if(p[i].v)add(p[i].p,p[i].v);else ans+=query(p[i].p)>;
ans1=ans*c+sum*a;
for(int i=;i<=n;i++)f[i]=i;
sort(f+,f+n+,cmp1);
int num=n;
for(int i=;i<=n;i++)
if(!vis[i])
{
num--;
for(int j=i;!vis[j];j=f[j])vis[j]=;
}
ans2=ans1+(b-a)*(sum-num);
if(ans1>ans2)swap(ans1,ans2);
printf("%d %d",ans1,ans2);
}
[GX/GZOI2019]特技飞行(扫描线+置换)的更多相关文章
- P5302 [GXOI/GZOI2019]特技飞行
题目地址:P5302 [GXOI/GZOI2019]特技飞行 这里是官方题解(by lydrainbowcat) 题意 给 \(10^5\) 条直线,给 \(x = st\) 和 \(x = ed\) ...
- 题解-GXOI/GZOI2019 特技飞行
Problem loj3085 bzoj不放题面差评 题意概要:给出两条竖直直线,再给出 \(n\) 架飞机的初始航线:一条接通这两条直线的线段,保证航线交点不在两条直线上.现要求安排所有飞机在航线相 ...
- [GXOI/GZOI2019]特技飞行
题目链接 [https://www.luogu.org/problem/P5302] 思路:这道题可以说是两道题的合并.注意到\(c\)的分数与 \(a\)和\(b\)的分数 无关,也就是说可以分成两 ...
- luogu P5302 [GXOI/GZOI2019]特技飞行
传送门 强行二合一可还行 首先\(c\)的贡献是不会变的,先考虑求出多少交点被矩形覆盖,交点的话可以按左端点纵坐标从下到上顺序枚举一条线段,然后维护右端点纵坐标的set,把之前处理过线段的右端点放进s ...
- Loj #3085. 「GXOI / GZOI2019」特技飞行
Loj #3085. 「GXOI / GZOI2019」特技飞行 题目描述 公元 \(9012\) 年,Z 市的航空基地计划举行一场特技飞行表演.表演的场地可以看作一个二维平面直角坐标系,其中横坐标代 ...
- 【LOJ】#3085. 「GXOI / GZOI2019」特技飞行
LOJ#3085. 「GXOI / GZOI2019」特技飞行 这显然是两道题,求\(C\)是一个曼哈顿转切比雪夫后的线段树扫描线 求\(AB\),对向交换最大化和擦身而过最大化一定分别为最大值和最小 ...
- 【GZOI 2019】特技飞行
Problem Description 公元 \(9012\) 年,Z 市的航空基地计划举行一场特技飞行表演.表演的场地可以看作一个二维平面直角坐标系,其中横坐标代表着水平位置,纵坐标代表着飞行高度. ...
- BZOJ2697: 特技飞行
2697: 特技飞行 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 607 Solved: 363[Submit][Status] Descript ...
- GX/GZOI2019 day2 解题报告
GX/GZOI2019 day2 解题报告 题目链接 逼死强迫症 旅行者 旧词 t1 逼死强迫症 显然地,记 \(f(i)\) 为长度为 \(i\) 的木板的答案,可得: \(\\\) \[f(i)= ...
随机推荐
- 三、CI框架之一个最简单的页面
一.在CI框架里面的controllers <?php defined('BASEPATH') OR exit('No direct script access allowed'); class ...
- [题解] CF622F The Sum of the k-th Powers
CF622F The Sum of the k-th Powers 题意:给\(n\)和\(k\),让你求\(\sum\limits_{i = 1} ^ n i^k \ mod \ 10^9 + 7\ ...
- 使用eclipse创建maven时遇到的问题
转自https://www.cnblogs.com/hongmoshui/p/7994759.html 1.在eclipse中用maven创建项目,右键new>>Maven Proje ...
- Spring中的注解——@nullable和@notnull
@nullable和@nutNull 在写程序的时候你可以定义是否可为空指针.通过使用像@NotNull和@Nullable之类的annotation来声明一个方法是否是空指针安全的.现代的编译器.I ...
- 尝试用kotlin做一个app(三)
新闻列表 添加新闻列表可以使用RecyclerView.但是有个问题,RecyclerView只会在内部滚动,不会带动整个屏幕滚动.所以在原根布局外层添加androidx.core.widget.Ne ...
- 一天一个设计模式——Abstract Factory抽象工厂模式
一.模式说明 前面学习了工厂方法(Factory Method)模式.在工厂方法模式中,在工厂方法模式中,父类决定如何生成实例,但并不决定所要生成的具体类,具体的处理交由子类来处理.这里学习的抽象工厂 ...
- VS2013的工程移植到VS2008
VS2013的工程完成后,用VS2008创建一个名称一样的工程(大小写也一样). 具体过程参考http://blog.csdn.net/sz76211822/article/details/42775 ...
- App基本界面组件案例
今天的收获颇大呀,我发现了一个更高效快速的学习方法,如果真的是因为学习内容太多,无从下手的话,不妨去别人或者自己崇拜的大佬里的博客园里面转一转,你就会有意外的收获,不仅给你学习的压力,还更直观的给介绍 ...
- Html 常见标签,css基础样式,css的浮动和清流,浏览器的兼容
1.html模板<!DOCTYPE html><html><head> <meta charset="UTF-8"> <tit ...
- ipa提取png图片,windows下显示黑色
原因:ipa提取的png图片经过xcode特殊格式处理,在windows下查看会显示黑色 方法1:通过“ ipin.py文件”转化 过程: 1.安装python,需2.7版本,本文使用2.7.5 ...