文章目录

  • 题目描述
  • 输入描述
  • 输出描述
  • 输入输出样例
  • 最终代码c/c++
  • 过程理解

题目描述

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

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

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

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

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

输入描述

输出描述

输出一行,包含一个整数,表示小朋友的不高兴程度和的最小值

输入输出样例

输入:

3
3 2 1

输出:

9

最终代码c/c++

#include <bits/stdc++.h>
using namespace std;
const int N = 1000010;
typedef long long LL;
int h[N], tree[N], k[N];        //h是身高,k是交换次数(逆序对数量)
int lowbit(int x) {  return x & -x; }
void update(int x, int d) {while(x <= N) {tree[x] += d;x += lowbit(x);}
}
int sum(int x) {int ans = 0;while(x > 0){ans += tree[x];x -= lowbit(x);}return ans;
}
int main() {int n; cin >> n;for (int i = 1; i <= n; i ++ ){cin >> h[i];h[i]++;          //h从1开始,不是从0开始}for (int i = 1; i <= n; i ++ ) {   //正序处理 逆序对,右边矮的k[i] = sum(N - 1) - sum(h[i]);update(h[i], 1);}memset(tree, 0, sizeof tree);for (int i = n; i; i-- ){         //倒序处理  逆序对,左边高的k[i] += sum(h[i] - 1);update(h[i], 1);}LL res = 0;for (int i = 1; i <= n; i ++ )    //最后把所有人的不愉快加起来res += (LL)k[i] * (k[i] + 1 ) / 2;cout << res;return 0;
}

过程理解

13.1 数状数组 ——【小朋友排队】相关推荐

  1. 一维数状数组区间修改,查询

    模板题CODEVS-1082 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[a,b]的数的和. 第一行一个正整数n,接下来n行n个整数, 再接下来一个正整数Q,每行表示操 ...

  2. hdu2492 数状数组或者线段树

    题意:      给你一些人,每个人有自己的攻击力,输入的顺序就是每个人的顺序,他们之间互相比赛,两个人比赛的条件是必须在他们两个位置之间找到一个人当裁判,这个裁判的攻击力必须在他们两个人之间,问你最 ...

  3. CF869E The Untended Antiquity(二维数状数组+差分+hash)

    考虑什么情况会不可达,当覆盖两点的最小矩形不同时,一定不可达.因此我们需要快速的知道覆盖一个点的最小矩形是哪个.我们考虑每次把一个矩形染色,那么复杂度是不可接受的.联想到我们一维做区间加法,单点查询时 ...

  4. Codeforces Round #439 (Div. 2) E. The Untended Antiquity (hash+数状数组)

    这个题,做出来的人很多,我感觉是数据不够强,我看了很多人的代码直接暴力也能过了,直接暴力如果数据够强的话肯定是时间超限,边缘数据不够强.如果和上次一样估计很多人的E会GG.我看到一位OIdalao的代 ...

  5. HDU 3874 Necklace (数状数组)

    题意:求[l, r]区间内不重复的数的和.N个数,M次询问 解:离线处理M次询问,看得别人的思路后才知道的...思维局限在预处理N个数上了... 对M次询问按右区间的值从小到大排序.扫一遍N个数,如果 ...

  6. HDU 1556 Color the ball (数状数组)

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  7. HDU 1166 敌兵布阵 树状数组小结(更新)

    树状数组(Binary Indexed Tree(BIT), Fenwick Tree) 是一个查询和修改复杂度都为log(n)的数据结构.主要用于查询任意两位之间的所有 元素之和,但是每次只能修改一 ...

  8. 树状数组:新手到大师 from TC

    Subscribe 树状数组(Binary Indexed Trees) November 15, 2012 作者:Hawstein 出处:http://hawstein.com/posts/bina ...

  9. 水饺基情 二维树状数组

    水饺基情 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submissi ...

最新文章

  1. C/S架构程序多种类服务器之间实现单点登录(转)
  2. MySQL高级能量预警
  3. python开发安卓程序-如何使用python开发Android手机应用?
  4. 操作系统——MiniDos
  5. 摄像头拍摄后对图片进行图像处理-python(空域增强)
  6. Oracle 数据库误truncate table恢复过程
  7. SecureCRT配色
  8. StretchDIBits函数显示图片
  9. 通信原理学习笔记-第二章《基础知识》
  10. oracle 文本日期相减,日期相减等于整数的问题
  11. QT property属性的应用
  12. 因为毕业半年挣了100万,帅地在CSDN被喷上热榜
  13. Karl Guttag:谈MicroLED AR光学难点,Mojo Vision还有很多问题
  14. nginx反向代理和正向代理
  15. mysql使用简单教程_Mysql使用简单教程(二)_MySQL
  16. RETHINKING SOFT LABELS FOR KNOWLEDGE DISTIL- LATION: A BIAS-VARIANCE TRADEOFF PERSPECTIVE
  17. Sass扫码点餐源码 单门店多门店餐饮连锁扫码点餐外卖自提系统源码
  18. 当限量潮牌遇到 DeFi, 币圈项目社群当投机时尚结合加密基元
  19. vue 图片转base64格式的方法
  20. stem教育小学制度管理

热门文章

  1. 高级JavaScript Day03 | 函数定义和调用、this、严格模式、高阶函数、闭包、递归
  2. Unity游戏开发中的向量运算-点乘和叉乘
  3. 自然语言处理(一)——文法(形式语言)基本概念
  4. 中国传媒大学计算机与网络安全学院研究生,林卫国 - 中国传媒大学 - 计算机与网络空间安全学院...
  5. 51nod 1693 水群(思维,最短路,spfa)
  6. 年前找Java实习面试经历
  7. Facebook把服务27亿人的AI硬件系统开源了
  8. redhat7安装oracle11gR2之动手安装
  9. Oracle数据库的毗邻
  10. 最新《ApplePay支付》接入