感觉是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]特技飞行(扫描线+置换)的更多相关文章

  1. P5302 [GXOI/GZOI2019]特技飞行

    题目地址:P5302 [GXOI/GZOI2019]特技飞行 这里是官方题解(by lydrainbowcat) 题意 给 \(10^5\) 条直线,给 \(x = st\) 和 \(x = ed\) ...

  2. 题解-GXOI/GZOI2019 特技飞行

    Problem loj3085 bzoj不放题面差评 题意概要:给出两条竖直直线,再给出 \(n\) 架飞机的初始航线:一条接通这两条直线的线段,保证航线交点不在两条直线上.现要求安排所有飞机在航线相 ...

  3. [GXOI/GZOI2019]特技飞行

    题目链接 [https://www.luogu.org/problem/P5302] 思路:这道题可以说是两道题的合并.注意到\(c\)的分数与 \(a\)和\(b\)的分数 无关,也就是说可以分成两 ...

  4. luogu P5302 [GXOI/GZOI2019]特技飞行

    传送门 强行二合一可还行 首先\(c\)的贡献是不会变的,先考虑求出多少交点被矩形覆盖,交点的话可以按左端点纵坐标从下到上顺序枚举一条线段,然后维护右端点纵坐标的set,把之前处理过线段的右端点放进s ...

  5. Loj #3085. 「GXOI / GZOI2019」特技飞行

    Loj #3085. 「GXOI / GZOI2019」特技飞行 题目描述 公元 \(9012\) 年,Z 市的航空基地计划举行一场特技飞行表演.表演的场地可以看作一个二维平面直角坐标系,其中横坐标代 ...

  6. 【LOJ】#3085. 「GXOI / GZOI2019」特技飞行

    LOJ#3085. 「GXOI / GZOI2019」特技飞行 这显然是两道题,求\(C\)是一个曼哈顿转切比雪夫后的线段树扫描线 求\(AB\),对向交换最大化和擦身而过最大化一定分别为最大值和最小 ...

  7. 【GZOI 2019】特技飞行

    Problem Description 公元 \(9012\) 年,Z 市的航空基地计划举行一场特技飞行表演.表演的场地可以看作一个二维平面直角坐标系,其中横坐标代表着水平位置,纵坐标代表着飞行高度. ...

  8. BZOJ2697: 特技飞行

    2697: 特技飞行 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 607  Solved: 363[Submit][Status] Descript ...

  9. GX/GZOI2019 day2 解题报告

    GX/GZOI2019 day2 解题报告 题目链接 逼死强迫症 旅行者 旧词 t1 逼死强迫症 显然地,记 \(f(i)\) 为长度为 \(i\) 的木板的答案,可得: \(\\\) \[f(i)= ...

随机推荐

  1. CocoaPods安装/卸载/初始化等常用操作

    CocoaPods的官网:https://cocoapods.org/,官方指导文档https://guides.cocoapods.org/ 1)ruby gem源更换国内源gems.ruby-ch ...

  2. git使用散记

    1.从远程clone一个项目 git clone ‘项目地址’ //clone项目地 git checkout -b dev origin/dev //远程已有dev分支,新建本地dev分支与远程相对 ...

  3. 阿里P7Java最全面试296题:阿里天猫、蚂蚁金服含答案文档解析

    [阿里天猫.蚂蚁.钉钉面试专题题目加答案] 不会做别着急:文末有答案以及视频讲解,架构师资料 1. junit用法,before,beforeClass,after, afterClass的执行顺序 ...

  4. Linux简介和环境的搭建

    Linux的学习方向 网络服务器 嵌入式程序开发 Linux的设计哲学:一切皆文件 常用命令:cd 切换目录sudo shutdown -h now 关机命令sudo reboot 重启sudo ro ...

  5. 读取word模板,填充数据后导出

    一.需求说明 定期生成word报告,报告中含有文本.表格.图表等元素,依次获取进行替换,保留原有样式,生成新的word文档 二.引入依赖 <dependency> <groupId& ...

  6. html_js

    <!-- js的特点:别名脚本 -由浏览器内置的JavaScript引擎执行代码. -解析执行:事先不编译,逐行执行 -面向对象:内置大量的现成对象 适宜: -客户端的数据计算:不需要保存和提交 ...

  7. NRF24L01中断双向传输数据

    NRF24L01是一款比较常见的无线通讯芯片,不过有个缺点就是只能半双工通讯,当涉及到双向通讯时就比较麻烦一些·,特别是想要做无线IAP数据需要一直来回发送,这点无疑然人恶心到想吐,不过还好有数据中断 ...

  8. SpringCloud学习之大纲总略(大纲篇)

    微服务架构的概念,现在对于大家应该都不陌生,无论使用 Apache Dubbo.还是 Spring Cloud,都可以去尝试微服务,把复杂而庞大的业务系统拆分成一些更小粒度且独立部署的 Rest 服务 ...

  9. 用Pandas Dataframe支撑起多只金融产品股票的数据内部形态

    3. 如果同时拿一个板块股票的收市价和成交额 前一篇说到,用大盘指数,如恒生指数,上证,深证,这些重要的大盘指数来做Dataframe主键,那麽如果是同时拿一个板块股票的收市价和成交额,可以怎样操作呢 ...

  10. potplayer记住播放进度

    (右键——选项)F5——播放——记忆视频播放位置