【蓝桥杯官网试题 - 历届试题】小朋友排队(逆序数,树状数组)
题干:
问题描述
n 个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。
每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是0。
如果某个小朋友第一次被要求交换,则他的不高兴程度增加1,如果第二次要求他交换,则他的不高兴程度增加2(即不高兴程度为3),依次类推。当要求某个小朋友第k次交换时,他的不高兴程度增加k。
请问,要让所有小朋友按从低到高排队,他们的不高兴程度之和最小是多少。
如果有两个小朋友身高一样,则他们谁站在谁前面是没有关系的。
输入格式
输入的第一行包含一个整数n,表示小朋友的个数。
第二行包含 n 个整数 H1 H2 … Hn,分别表示每个小朋友的身高。
输出格式
输出一行,包含一个整数,表示小朋友的不高兴程度和的最小值。
样例输入
3
3 2 1
样例输出
9
样例说明
首先交换身高为3和2的小朋友,再交换身高为3和1的小朋友,再交换身高为2和1的小朋友,每个小朋友的不高兴程度都是3,总和为9。
数据规模和约定
对于10%的数据, 1<=n<=10;
对于30%的数据, 1<=n<=1000;
对于50%的数据, 1<=n<=10000;
对于100%的数据,1<=n<=100000,0<=Hi<=1000000。
解题报告:
我就说嘛、、、过了70%,不可能是思路错误,,检查了半天发现最后的统计答案爆了longlong、、、气死我了。
这题的关键在于看到交换的条件是:只能交换相邻的两个元素。这就使得问题简单了很多。考虑到x这个数,假设最后肯定要被交换到对应的位置上,那么看最少需要被交换多少次,在看这个次数能否可以实现。不难发现,最少被交换的次数,就是和前面比他大的数字,并且和后面比他小的数字。所以求该数对应的逆序数就行了。那么这个次数能否实现呢?不妨这样想,只考虑第i个数,假设前面比他大的有x1个,后面比他小的有x2个,我们先想办法将他前面比他大的数都交换到他后面去,这样他移动的次数就肯定是x1,并且得到的这样一个状态肯定是在他本该在的位置的前面,然后我们再通过和后面的数字的交换让他回到原来的位置就可以了,这一套操作是x2次,所以总次数可以达到x1+x2次。
AC代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define F first
#define S second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 2e6 + 5;
int a[MAX];
int c[MAX];
int lowbit(int x){return x&(-x);}
int query(int x) {int res = 0;while(x>0) {res += c[x];x-=lowbit(x);}return res;
}
void update(int x,int val) {while(x<MAX) {c[x] += val;x+=lowbit(x);}
}
int ans1[MAX],ans2[MAX],ans[MAX];
int main()
{int n;cin>>n;for(int i = 1; i<=n; i++) {scanf("%d",a+i);a[i]++;}for(int i = n; i>=1; i--) {ans1[i] = query(a[i]-1);update(a[i],1);}memset(c,0,sizeof c);for(int i = 1; i<=n; i++) {ans2[i] = query(1000010) - query(a[i]);update(a[i],1);}for(int i = 1; i<=n; i++) ans[i] = ans1[i] + ans2[i];ll res = 0;for(int i = 1; i<=n; i++) {res += 1LL*(1+ans[i])*ans[i]/2;}printf("%lld\n",res);return 0 ;
}
【蓝桥杯官网试题 - 历届试题】小朋友排队(逆序数,树状数组)相关推荐
- 【蓝桥杯官网训练 - 历届试题】对局匹配(dp,思维,取模)
题干: 问题描述 小明喜欢在一个围棋网站上找别人在线对弈.这个网站上所有注册用户都有一个积分,代表他的围棋水平. 小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是K的两名用户匹配在一起.如果 ...
- [蓝桥杯][2018年第九届真题]整理玩具(树状数组)
题目描述 小明有一套玩具,一共包含NxM个部件.这些部件摆放在一个包含NxM个小格子的玩具盒中,每个小格子中恰好摆放一个部件. 每一个部件上标记有一个0~9的整数,有可能有多个部件标记相同的整数. 小 ...
- [蓝桥杯][2018年第九届真题]日志统计(树状数组)
题目描述 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有N行.其中每一行的格式是: ts id 表示在ts时刻编号id的帖子收到一个"赞". ...
- 蓝桥杯官网 试题 PREV-61 历届真题 装饰珠【第十一届】【决赛】【研究生组】【C++】【C】【Java】【Python】四种解法
为帮助大家能在6月18日的比赛中有一个更好的成绩,我会将蓝桥杯官网上的历届决赛题目的四类语言题解都发出来.希望能对大家的成绩有所帮助. 今年的最大目标就是能为[一亿技术人]创造更高的价值. 资源限制 ...
- 蓝桥杯官网 试题 PREV-240 历届真题 答疑【第十一届】【决赛】【研究生组】【C++】【C】【Java】【Python】四种解法
为帮助大家能在6月18日的比赛中有一个更好的成绩,我会将蓝桥杯官网上的历届决赛题目的四类语言题解都发出来.希望能对大家的成绩有所帮助. 今年的最大目标就是能为[一亿技术人]创造更高的价值. 资源限制 ...
- 蓝桥杯官网 试题 PREV-109 历届真题 扫地机器人【第十届】【省赛】【研究生组】【C++】【Java】【Python】三种解法
为帮助大家能在6月18日的比赛中有一个更好的成绩,我会将蓝桥杯官网上的历届决赛题目的四类语言题解都发出来.希望能对大家的成绩有所帮助. 今年的最大目标就是能为[一亿技术人]创造更高的价值. 资源限制 ...
- 蓝桥杯官网 试题 PREV-265 历届真题 砝码称重【第十二届】【省赛】【研究生组】【C++】【C】【Java】【Python】四种解法
为帮助大家能在6月18日的比赛中有一个更好的成绩,我会将蓝桥杯官网上的历届决赛题目的四类语言题解都发出来.希望能对大家的成绩有所帮助. 今年的最大目标就是能为[一亿技术人]创造更高的价值. 资源限制 ...
- 蓝桥杯官网刷题记录python
蓝桥杯官网刷题记录python 由于很多题都会在2020.2021.2022年省赛出现,有的在前面文章里做过的这里就不会再说了 一.空间 小蓝准备用 256MB 的内存空间开一个数组,数组的每个元素都 ...
- 蓝桥杯python组练题第二天——成绩统计——蓝桥杯官网题库
成绩统计 题目描述 小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数. 如果得分至少是 60 分,则称为及格.如果得分至少为 85 分,则称为优秀. ...
最新文章
- CSS自定义鼠标样式。JS获取鼠标坐标,实现提示气泡框跟随鼠标移动
- 网络发展的模式之一:新功能在应用系统涌现,然后逐渐迁移到基础设施
- 3_5 ResponsibilityChainMode 责任链模式
- java 打包zip下载_java web 将文件打包成 .zip后 肿么自动弹出下载框提示并下载?
- linux sublime3 插件安装插件,手动安装sublimeText3插件
- errcode: 41001, errmsg: access_token missing hint: [w.ILza05728877!]
- 多线程 之 生产者与消费者
- svg的viewport和viewbox
- spring与jpa整合 简化persistence.xml配置文件 使用属性文件 数据源dbcp访问数据库...
- VUe Eelement-ui 兼容es6 兼容IE9+ 报错:SCRIPT1003: 缺少 ':’
- win10计算机策略配置文件,Win10系统如何打开组策略?打开组策略的具体方法
- 相邻素数的差最大是多少c语言,怎么证明?相邻两个素数之差的最大值
- android图片按比例缩放,Android开发之imageView图片按比例缩放的实现方法
- VINS-Mono 代码解析六、边缘化(2)理论和代码详解
- java魂斗罗_向经典致敬--跟我用Java写魂斗罗
- 如何设置行间距和字间距?
- 打印机一直不停打乱码的解决方法
- fedora26下解决wps字体缺失(添加windows字体)
- 攻防世界crypto高手题之best_rsa
- 学习 VS2010编程经典示例
热门文章
- [Leetcode][第459题][JAVA][重复的字符串][子串][匹配]
- [剑指offer]面试题第[50]题[JAVA][第一个只出现一次的字符][哈希表][HashMap]
- android studio 无法输入中文,Android Studio 升级到3.0后输入法中文状态下无法选词的终极解决方案...
- xml生成2维码_MyBatis(2)之MyBatis-Generator最佳实践
- ios 部分string颜色_iOS-代码混淆加固方案
- phpstudy(自己电脑主机做服务器,手机网站界面打不开)
- mysql数据备份在哪里_mysql之数据备份与恢复
- 找到一个二位数组的鞍点
- java getapplicationcontext_java – getApplicationContext()中的空指针
- ST7789V2 LCD驱动芯片