Luna likes Love 题解
简要题意
题目很清楚。
分析
定理
两个人中左边的人一直向右运动,和两人向中间走所用的
步数相同
证明
假设有两组人为 \(a_l , a_r , b_l , b_r (a_l < a_r , b_l < b_r)\)。
\(\textrm{I}.\) 当 \(a_r < b_l\)(两者互不相交) 时
如图:

显然成立。
$ \textrm{II}.$ 当 $a_l < b_l < a_r < b_r $(两者相交) 时
如图:

假设先走 \(a\),此时 \(ans += a_r - a_l\)。
再走 \(b\),此时 \(ans += b_r - b_l - 1\)(中间有一个 \(a_l\) 已经走完)。
最后 \(ans = (b_r - b_l) + (a_r - a_l) - 1\)。
再考虑将 \(a\) 两端走到 \(b\) 之间的情况(略,和上面的方法一样)。
$ \textrm{III}.$ 当 \(a_l < b_l < b_r < a_r\)(两者包含)时
略(并不难证和情况 \(2\) 证明方法一样)。
综上,证明得证。
此时题目就很简单了。
最终实现
那么就可以贪心的让区间短的先走就行了(因为先走小的,大的区间距离会减小;反之,则不行)。
那就只需要用树状数组记录其中的已消失的数,统计答案时减去区间已消失的数。
code
#include <bits/stdc++.h>
using namespace std;
using ll = long long ;
const int N = 5e5 + 5 ;
int n;
struct REN{
int first,last;
int len;
bool operator<(const REN&x)const{return len<x.len;}
}p[N];
ll ans;
struct FenwickTree{
private:
ll t[N<<1];
int lowbit(int x){return x&-x;}
public:
void add(int x,int val){for(;x<=n*2;x+=lowbit(x))t[x]+=val;}
ll ask(int x){ll ans=0;for(;x;x-=lowbit(x))ans+=t[x];return ans;}
}t;
int main(){
scanf("%d",&n);
for(int i=1,x;i<=2*n;i++){
scanf("%d",&x);
if(!p[x].first)p[x].first=i;
else p[x].last=i;
p[x].len=p[x].last-p[x].first; // 记录区间长度和头和尾
}
sort(p+1,p+n+1);//贪心
for(int i=1;i<=n;i++){
ans+=p[i].len-t.ask(p[i].last)+t.ask(p[i].first-1);//减去已经消失的
t.add(p[i].first,1);
t.add(p[i].last,1);// 记录这个人已经消失
}
printf("%lld",ans);
return 0;
}
Luna likes Love 题解的更多相关文章
- Codeforces Round #631 (Div. 1) B. Dreamoon Likes Sequences 题解(思维+求贡献)
题目链接 题目大意 让你构造一个严格单调上升的数组a满足\(1<=a_1<a_2<....a_n<=d\) 而且要使得这个数组的异或前缀和也满足严格单调上升,求有多少个满足条件 ...
- Codeforces Round #631 div1C(或者div2E) Drazil Likes Heap 题解
题目链接:https://codeforces.com/contest/1329/problem/C 或者:https://codeforces.com/contest/1330/problem/E ...
- HDU5597/BestCoder Round #66 (div.2) GTW likes function 打表欧拉函数
GTW likes function Memory Limit: 131072/131072 K (Java/Others) 问题描述 现在给出下列两个定义: f(x)=f_{0}(x)=\ ...
- HDU 5597 GTW likes function 打表
GTW likes function 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5596 Description Now you are give ...
- HDU 5596 GTW likes gt 倒推
GTW likes gt 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5596 Description Long long ago, there w ...
- GTW likes math(简单数学)
GTW likes math Accepts: 472 Submissions: 2140 Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...
- 洛谷P2891 Dining P1402 酒店之王【类二分图匹配】题解+代码
洛谷P2891 Dining P1402 酒店之王[类二分图匹配]题解+代码 酒店之王 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的 ...
- Educational Codeforces Round 13 A. Johny Likes Numbers 水题
A. Johny Likes Numbers 题目连接: http://www.codeforces.com/contest/678/problem/A Description Johny likes ...
- 2016级算法第六次上机-G.ModricWang likes geometry
1116 ModricWang likes geometry 思路 难题,非常考察几何知识,放在这里作为计算几何场次的最难的题. 原题地址 原版题解 代码
- Codeforces Round #177 (Div. 2) 题解
[前言]咦?如今怎么流行打CF了?于是当一帮大爷在执着的打div 1的时候,我偷偷的在刷div 2.至于怎么决定场次嘛.一般我报一个数字A,随便再拉一个人选一个数字B.然后開始做第A^B场.假设认为机 ...
随机推荐
- letcode-括号生成
递归大法,空间换时间 就是记录左右括号数,一旦右括号数大于左括号数,退出. 当左右括号数相等,且等于n则为合法解. 使用char数组取代StringBuilder可以减少内存使用,这样每次进行回溯时不 ...
- 【Java复健指南07】OOP中级02-重写与多态思想
前情提要:https://www.cnblogs.com/DAYceng/category/2227185.html 重写 注意事项和使用细节 方法重写也叫方法覆法,需要满足下面的条件 1.子类的方法 ...
- Spring使用注解方式进行事务管理
目录 使用步骤: 步骤一.在spring配置文件中引入tx:命名空间 步骤二.具有@Transactional 注解的bean自动配置为声明式事务支持 步骤三.在接口或类的声明处 ,写一个@Trans ...
- 【Azure Logic App】消费型逻辑应用在消费Service Bus时遇见消息并发速度慢,消息积压
问题描述 消费型逻辑应用(Consumption Logic App)使用触发器模式消费 Azure Service Bus的消息,当Service Bus中存在大量消息等待消费时,Logic App ...
- 【Azure 应用服务】PHP项目部署到App Service for Linux环境中,如何修改上传文件大小的限制呢?
问题描述 PHP项目部署到App Service for Linux环境中,如何修改上传文件大小的限制呢? 问题解答 经过查询Azure App Service官方文档,可能通过在项目根目录下添加.h ...
- 【Azure 应用服务】部署Azure Web App时,是否可以替换hostingstart.html文件呢?
问题描述 当成功创建一个Web App时,通过高级工具(Kudu)可以查看 Web App的根目录(wwwroot)中有一个默认的文件(hostingstart.html).它就是应用服务的默认页面. ...
- 2024年,提升Windows开发和使用体验实践 - 小工具篇
前言 本来是一篇文章的,不知不觉写成了系列. 其实开工那几天就已经写好了长文,这几天一忙就没连着发了. 本文介绍一些 Windows 上用的小工具. 美化/折腾/小工具 虽然这是在用 Windows ...
- D3.js 力导向图的显示优化(二)- 自定义功能
摘要: 在本文中,我们将借助 D3.js 的灵活性这一优势,去新增一些 D3.js 本身并不支持但我们想要的一些常见的功能:Nebula Graph 图探索的删除节点和缩放功能. 文章首发于 Nebu ...
- vscode+gitee+picgo实现稳定图床
目录: 目录 目录: 1. 为什么使用vscode+gitee+picgo实现完美图床 2. 安装VSCode 2.1 安装VSCode软件及相关插件 3. 安装picgo 4. 准备Gitee图床 ...
- Linux操作系统不同文件类型区别?
蓝色代表目录,绿色代表可执行文件,红色代表压缩文件.浅蓝色表示连接文件.白色表示其他文件 相关目录及作用: Bin : 存放普通用户可执行的指令 Boot: 开机引导目录 Dev:设备目录 Etc: ...