蓝桥杯-PREV31-小朋友排队
解法:
这题有点像冒泡排序,但是做这题并不需要冒泡排序。
假设第i个小朋友比第j个小朋友高,而且i < j
为了把队伍排成从小到大,第i个小朋友一定要去第j个小朋友的右边。又因为只能交换位置相邻的两个小朋友,所以第i个小朋友一定要和第j个小朋友换位置。同理如果第i个小朋友比第j个小朋友矮,但是i > j,这i,j 两个小朋友一定要换一次位置
则第j个小朋友交换位置的次数为左边高于自己的人数加右边低于自己的人数;所以可以for一遍所以人,求出每个人换位置的次数,然后求出总怒气值。暴力的复杂度是O(N*N),只能过30%的数据,会超时,这时候需要用树状数组来优化;
- 树状数组
小朋友排队 828B C++ 正确 100 187ms 12.39MB #include "bits/stdc++.h"
using namespace std;
typedef long long LL;
const int MAXN = ;
int arr[MAXN], t1[MAXN], t2[MAXN];
int lowbit(int n) {
return n & -n;
}
void add(int* t, int n, int v) {
while (n < MAXN) {
t[n] += v;
n += lowbit(n);
}
}
int query(int* t, int n) {
int res = ;
while (n) {
res += t[n];
n -= lowbit(n);
}
return res;
}
int main() {
int n;
scanf("%d", &n);
for (int i = ; i <= n; i++) {
scanf("%d", &arr[i]);
// 因为arr[i]可能为0,树状数组要避免0号下标,所以把所有arr[i]加1,不影响大小关系
arr[i]++;
add(t2, arr[i], );
}
LL res = ;
for (int i = ; i <= n; i++) {
int v = i - - query(t1, arr[i]) + query(t2, arr[i] - );
res += (v + 1LL) * v >> ;
add(t2, arr[i], -);
add(t1, arr[i], );
}
printf("%lld\n", res);
return ;
}之前少了arr[i]++导致超时了一次,记录一下吸取教训。
蓝桥杯-PREV31-小朋友排队的更多相关文章
- 小朋友排队|2014年蓝桥杯B组题解析第十题-fishers
小朋友排队 n 个小朋友站成一排.现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友. 每个小朋友都有一个不高兴的程度.开始的时候,所有小朋友的不高兴程度都是0. 如果某个小朋 ...
- Java实现第九届蓝桥杯小朋友崇拜圈
小朋友崇拜圈 题目描述 班里N个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己). 在一个游戏中,需要小朋友坐一个圈, 每个小朋友都有自己最崇拜的小朋友在他的右手边. 求满足条件的圈最大多少人 ...
- 2013第四届蓝桥杯决赛Java高职高专组题目以及解法答案
2013第四届蓝桥杯决赛Java高职高专组题目以及解法答案 不知不觉离决赛都过去一个月了,一直忙于各种事情,都忘记整理一份试题.当作回忆也好. 1. 标题:好好学习 汤姆跟爷爷来中国旅游.一天,他帮助 ...
- 第四届蓝桥杯 c/c++真题
第四届蓝桥杯 c/c++真题 <1>高斯日记 问题 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们 ...
- 2017第八届蓝桥杯C/C++语言A组
一:题目: 标题:迷宫 X星球的一处迷宫游乐场建在某个小山坡上.它是由10x10相互连通的小房间组成的. 房间的地板上写着一个很大的字母.我们假设玩家是面朝上坡的方向站立,则:L表示走到左边的房间,R ...
- 算法笔记_056:蓝桥杯练习 未名湖边的烦恼(Java)
目录 1 问题描述 2 解决方案 2.1 递归法 2.2 递推法 1 问题描述 问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰 ...
- 2015年蓝桥杯B组C/C++决赛题目
2015年第六届蓝桥杯B组C/C++国赛题目 点击查看2015年第六届蓝桥杯B组C/C++国赛题解 1.积分之迷 小明开了个网上商店,卖风铃.共有3个品牌:A,B,C. 为了促销,每件商品都会 ...
- 第四届蓝桥杯JavaC组省赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.猜年龄 题目描述 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学.他曾在1935~1936年应邀来中国清华大学讲学. 一 ...
- 第八届蓝桥杯JavaB组省赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.购物单 题目描述 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推 ...
随机推荐
- [极客大挑战 2019]BuyFlag
0x00 知识点 php中的strcmp漏洞 说明: int strcmp ( string $str1 , string $str2 ) 参数 str1第一个字符串.str2第二个字符串.如果 st ...
- TX2Ubuntu16.04上安装 kinectV2
本文参考 https://www.ncnynl.com/archives/201706/1780.html 参考 https://blog.csdn.net/qq_33835307/arti ...
- DRF-JWT
DRF-JWT 一.JWT JWT全称: json web token, 作用:将原始的数据json加密成字符串,通过后台将加密的字符串给前台存储(token) 格式:三段式,头.载荷.签名 , 头和 ...
- share团队冲刺1
团队冲刺第一天 今天:网上学习Android软件开发的知识,完成简单的操作,实现简单功能. 问题:无
- PHP语言编写的磁力搜索工具下载BT种子 支持transmission、qBittorrent
磁力搜索网站2020/01/12更新 https://www.cnblogs.com/cilisousuo/p/12099547.html PT种子.BT种子搜索功能 IYUU自动辅种工具,目前能对国 ...
- 吴裕雄--天生自然 PHP开发学习:高级
<?php echo date("Y/m/d") . "<br>"; echo date("Y.m.d") . " ...
- KVM---利用 libvirt+qemu-kvm 创建虚拟机
KVM 虚拟化已经是一个工业级的虚拟化解决方案了,以前都是直接下载 VMware,然后安装其他操作系统的,今天我们来体验一下自己动手创建一台虚拟机,这样你就会知道在KVM下创建一台虚拟机,是多么简单的 ...
- HTML引入文件/虚拟目录/绝对路径与相对路径
此篇引见 相对路径和绝对路径的区别 1.绝对路径 使用方法:而绝对路径可以使用“\”或“/”字符作为目录的分隔字符 绝对路径是指文件在硬盘上真正存在的路径.例如 <body backround= ...
- 6.docker container
1. 什么是container 通过 image 创建 (copy得到的) 在 image layer (在image 层) 上 增加了一层 container layer (container 层 ...
- org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'socialCode' in 'class java.lang.String'
异常: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.Refl ...