题目描述
n 个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。

每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是0。

如果某个小朋友第一次被要求交换,则他的不高兴程度增加1,如果第二次要求他交换,则他的不高兴程度增加2(即不高兴程度为3),依次类推。当要求某个小朋友第k次交换时,他的不高兴程度增加k。

请问,要让所有小朋友按从低到高排队,他们的不高兴程度之和最小是多少。

如果有两个小朋友身高一样,则他们谁站在谁前面是没有关系的。

样例说明
首先交换身高为3和2的小朋友,再交换身高为3和1的小朋友,再交换身高为2和1的小朋友,每个小朋友的不高兴程度都是3,总和为9。
数据规模和约定
对于100%的数据,1< =n< =100000,0< =Hi< =1000000。

输入
输入的第一行包含一个整数n,表示小朋友的个数。
第二行包含 n 个整数 H1 H2 … Hn,分别表示每个小朋友的身高。
输出
输出一行,包含一个整数,表示小朋友的不高兴程度和的最小值。
样例输入
3
3 2 1
样例输出
9
思路:我们要计算每一个数的移动次数。每一个数的移动次数等于大于它但是先出现的,和小于它但是后出现的个数。树状数组解决就可以了。
代码如下:

#include<bits/stdc++.h>
#define ll long long
using namespace std;const int maxx=1e5+100;
int c[maxx];
int a[maxx],b[maxx],ans[maxx];
int n;inline int lowbit(int x){return x&-x;}
inline void update(int cur,int v)
{while(cur<=maxx){c[cur]+=v;cur+=lowbit(cur);}
}
inline int query(int cur)
{int sum=0;while(cur){sum+=c[cur];cur-=lowbit(cur);}return sum;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d",&a[i]),b[i]=a[i];sort(b+1,b+1+n);memset(c,0,sizeof(c));for(int i=1;i<=n;i++) a[i]=lower_bound(b+1,b+1+n,a[i])-b;//事先离散化,减少空间复杂度。for(int i=1;i<=n;i++){ans[i]=(a[i]-1-query(a[i]-1))+(query(maxx)-query(a[i]));update(a[i],1);}//for(int i=1;i<=n;i++) cout<<ans[i]<<" ";cout<<endl;ll sum=0;for(int i=1;i<=n;i++) sum+=(ll)((ll)(1+ans[i])*(ll)(ans[i]))/2ll;//注意long long,白wa了一发cout<<sum<<endl;return 0;
}

努力加油a啊,(o)/~

[蓝桥杯][历届试题]小朋友排队(树状数组)相关推荐

  1. 蓝桥杯 - 历届试题 小朋友排队 C语言实现

     历届试题 小朋友排队 时间限制:1.0s   内存限制:256.0MB 问题描述 n 个小朋友站成一排.现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友. 每个小朋友都有一 ...

  2. 蓝桥杯 历届试题 小朋友排队 C++

    题目阅览 n 个小朋友站成一排.现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友. 每个小朋友都有一个不高兴的程度.开始的时候,所有小朋友的不高兴程度都是0. 如果某个小朋友 ...

  3. 蓝桥杯小朋友排队java_[蓝桥杯][历届试题]小朋友排队 (C++代码)

    #include #define maxn 100010 struct data { int num,cnt; }A[maxn],temp[maxn]; int n; //long long ans; ...

  4. 历届试题+九宫重排+java_蓝桥杯 历届试题 九宫重排 (bfs+康托展开去重优化)...

    Description 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成第二个图所示的局面. 我们把第一个图的 ...

  5. [蓝桥杯][历届试题]国王的烦恼(反向+并查集)

    问题 1435: [蓝桥杯][历届试题]国王的烦恼 时间限制: 1Sec 内存限制: 128MB 提交: 802 解决: 213 题目描述 C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了 ...

  6. 蓝桥杯 - 历届试题 - 日期问题

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_33531813/article/details/79516258 </div>&l ...

  7. 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索

    问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...

  8. 二分搜索,POJ2456,NYOJ 914, 区间移位-蓝桥杯-历届试题

    二分搜索是不断缩减可能解的范围来得到最优解, 因为每次是折半, 所以指数爆炸有多快,这个效率就有多高 POJ2456为例, 传送门 简而言之, 就是将牛之间的距离的最小值最大化. #include&l ...

  9. 蓝桥杯历届试题代码参考

    蓝桥杯历届试题代码参考 历届试题 核桃的数量 打印十字图 带分数 剪格子 错误票据 翻硬币 连号区间数 买不到的数目 大臣的旅费 幸运数 横向打印二叉树 危险系数 网络寻路 高僧斗法 格子刷油漆 农场 ...

最新文章

  1. 如何利用隐写术配合四个重定向连接到C2服务器
  2. cpu内存调度python_Python/Pycharm内存和CPU分配以提高运行速度?
  3. gdb调试caffe工程
  4. 计算机网络基础:TCP/IP协议相关知识笔记​
  5. linux 修改ldap密码,centos – ldap强制用户更改密码
  6. 基于Python的应用程序的虚拟环境
  7. SpringBoot 2.0 Actuator监控系统
  8. 从“判断力”到“创造力”:GAN 在图像生成上的应用
  9. 五分钟搭建 Flash 视频直播站
  10. 可以十倍地提高.NET 应用程序的速度集群存储器对象缓存控件NCache
  11. php可以写无缝轮播图吗,怎样用css实现无缝轮播图切换?
  12. fluent python_流畅的Python-Fluent Python简要书评
  13. adb安装apk到智能TV上
  14. 计算机美术基础课程标准,《计算机美术基础》教学大纲 课程标准 最全最新.doc...
  15. 每天学点Vue,学习笔记---DAY4
  16. XSS第一节,XSS档案
  17. 传播动力学--SIR模型及其应用
  18. 当年明月 Vs. 阎崇年
  19. git push到远程仓库时出现unable to access 'https://github.com/**': The requested URL returned error: 403
  20. 找不到resources下的资源 can‘t find ...

热门文章

  1. 关于如何将轮播图在移动端和pc端自适应的操作
  2. 时间序列分析 pdf_多变量时间序列的聚类分析与相似查询——多变量时间序列的相似查询分析...
  3. 13寸笔记本电脑尺寸_2019年五款最好的13英寸笔记本电脑(windows)
  4. linux 内核 面试 机制,请你来说一下linux内核中的Timer 定时器机制
  5. Android开发之adb命令安装apk的问题
  6. Android Studio百度地图开发所需参数获取SHA1或MD5的最简单方法(图文教程)
  7. mailcore -- POP
  8. UILocalNotification详解
  9. 盘点2010年十大出版事件 文著协“宣战”百度文库
  10. R语言对用电负荷时间序列数据进行K-medoids聚类建模和GAM回归