题目:

资源限制
时间限制:1.0s 内存限制:256.0MB

问题描述

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。

分析:

这道题拿到手,第一反应排个序呗,暴力做,再一看数据范围。哦,会超时,这时候就想起之前的那道树状数组判最小逆序对的题,树状数组能解决前面有多少个数比他小的问题。
故通过两次树状数组,求得 某个小朋友 iii 会被交换的次数 su[i]su[i]su[i]
第一次 树状数组 顺序找到 在小朋友 iii左边且比小朋友i身高低的人数XXX,那么在小朋友i左边且比小朋友i身高高的人数为 i−Xi-Xi−X,提醒一下,此时还要减去当等于a[i]的所有数。所以找的是小于a[i]+1的所有数。
第二次 树状数组 逆序直接找到 在小朋友i右边且比小朋友i身低的人数

AC模板:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef long long ll;
const int M=1e6+10;
int n,ma;
int a[M];
ll su[M],sm[M],num;
int lowbit(int x){return x&(-x);
}
void build(int x){//建立关系,将大于x的数存入while(x<=ma+1){//注意此处是ma+1su[x]++;x+=lowbit(x);}
}
ll query(int x){//从先到后比x矮的小朋友个数ll ans=0;while(x>0){ans+=su[x];x-=lowbit(x);}return ans;
}
int main(){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i]);ma=max(ma,a[i]);}for(int i=1;i<=n;i++){build(a[i]+1);sm[i]+=(i-query(a[i]+1));}memset(su,0,sizeof(su));for(int i=n;i>0;i--){build(a[i]+1);sm[i]+=query(a[i]);}for(int i=1;i<=n;i++)num+=(sm[i]+1)*sm[i]/2;printf("%lld\n",num);return 0;
}

备战ing ,题目分析简略,见谅,转载请注明出处。。。。。

蓝桥杯2014届试题9题 小朋友排队(树状数组+类逆序对)相关推荐

  1. [蓝桥杯][算法提高VIP]分苹果(差分||树状数组)

    题目描述 小朋友排成一排,老师给他们分苹果. 小朋友从左到右标号1-N.有M个老师,每次第i个老师会给第Li个到第Ri个,一共Ri-Li+1个小朋友每人发Ci个苹果. 最后老师想知道每个小朋友有多少苹 ...

  2. [USACO17FEB] Why Did the Cow Cross the Road I P (树状数组求逆序对 易错题)

    题目大意:给你两个序列,可以序列进行若干次旋转操作(两个都可以转),对两个序列相同权值的地方连边,求最少的交点数 记录某个值在第一个序列的位置,再记录第二个序列中某个值 在第一个序列出现的位置 ,求逆 ...

  3. Asia Yokohama Regional Contest 2018 G题 What Goes Up Must Come Down(树状数组求逆序对)

    https://codeforces.com/gym/102082 题意: 给一个数组大小不超过1e5,每个数的值也是1e5以内,可以交换相邻两个数,求保证它呈现一个非递减再非递增的趋势的最小交换次数 ...

  4. 问题 1819: [蓝桥杯][2014年第五届真题]Log大侠

    问题 1819: [蓝桥杯][2014年第五届真题]Log大侠 时间限制: 1Sec 内存限制: 128MB 提交: 236 解决: 173 题目描述  atm参加了速算训练班,经过刻苦修炼,对以2为 ...

  5. [蓝桥杯][2014年第五届真题]分糖果-模拟

    题目描述 问题描述 有n个小朋友围坐成一圈.老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边的孩子. 一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从 ...

  6. 【蓝桥杯官网试题 - 真题训练】生命之树(树形dp)

    题干: 在X森林里,上帝创建了生命之树. 他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值. 上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点a,b,都存 ...

  7. 问题 1431: [蓝桥杯][2014年第五届真题]分糖果 ——思维+模拟

    10分钟写完了代码,提交了三次全部超时,检查了也没发现死循环,把错误代码放上,眼睛疼,明天再改. 题目描述 问题描述 有n个小朋友围坐成一圈.老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每 ...

  8. 蓝桥杯2014年第五届真题-六角填数

    题目 如图所示六角形中,填入1~12的数字. 使得每条直线上的数字之和都相同. 图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少? 请通过浏览器提交答案,不要填写多余的内容. 题解 全 ...

  9. [蓝桥杯][2014年第五届真题]地宫取宝(记忆化搜索)

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

最新文章

  1. 洛谷 1373 小a和uim之大逃离
  2. 超图数据集管理基本操作和添加删除属性表字段
  3. 李学勤:功利化是现在教育的最大问题
  4. linux挂载查看、添加与取消
  5. Python实现普通二叉树
  6. C语言丨线性查找(顺序查找)
  7. Android快速开发框架LoonAndroid (转)
  8. 买了社保,再买农村医保是不是多余?
  9. 二叉树中是否存在节点和为指定值的路径
  10. 解密亚马逊Ironman计划:背靠AWS云服务发力AI,对抗谷歌微软
  11. python和c 的区别-C++/C/JAVA/Python之间的区别?
  12. 翻译:swift 5初始化 被忽略的Convenience便捷初始化、Required和继承
  13. 关于Facebook,Linkedin网的数据采集总结
  14. XML学习总结(三)——SAXReader解析xml文件数据
  15. android中一些特殊字符的使用(如:←↑→↓等箭头符号)
  16. TensorFlow 决策森林来啦!
  17. ISP(图像信号处理)白平衡White Balance
  18. R语言:修改chart.Correlation()函数绘制相关性图——完美出图
  19. 点击一次变色,再点击变回原色
  20. swiper轮播图鼠标移入暂停有延时的问题

热门文章

  1. Android之BaseRecyclerViewAdpater(3.0.4版本)当页面第二次滑到底部的时候没有触发OnLoadMoreListener监听的onLoadMore函数
  2. Android之实现点击布局缩小然后再放大动画
  3. C语言试题八之计算下列级数和,和值由函数值返回 S=1+x+x^2/2! + x^3/3!+…x^n/n!
  4. LeetCode之Merge Two Sorted Lists
  5. 字符串之数组中两个字符串的最小距离
  6. sqlite数据库的char,varchar,text,nchar,nvarchar,ntext的区别
  7. Android之RxJava(一)
  8. 栈和队列之仅用递归函数和栈操作逆序一个栈
  9. 关于nginx为站点绑定域名以及绑定多个域名
  10. 数据结构关键路径_数据结构与算法之关键路径_一点课堂(多岸学院)