13.1 数状数组 ——【小朋友排队】
文章目录
- 题目描述
- 输入描述
- 输出描述
- 输入输出样例
- 最终代码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 数状数组 ——【小朋友排队】相关推荐
- 一维数状数组区间修改,查询
模板题CODEVS-1082 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[a,b]的数的和. 第一行一个正整数n,接下来n行n个整数, 再接下来一个正整数Q,每行表示操 ...
- hdu2492 数状数组或者线段树
题意: 给你一些人,每个人有自己的攻击力,输入的顺序就是每个人的顺序,他们之间互相比赛,两个人比赛的条件是必须在他们两个位置之间找到一个人当裁判,这个裁判的攻击力必须在他们两个人之间,问你最 ...
- CF869E The Untended Antiquity(二维数状数组+差分+hash)
考虑什么情况会不可达,当覆盖两点的最小矩形不同时,一定不可达.因此我们需要快速的知道覆盖一个点的最小矩形是哪个.我们考虑每次把一个矩形染色,那么复杂度是不可接受的.联想到我们一维做区间加法,单点查询时 ...
- Codeforces Round #439 (Div. 2) E. The Untended Antiquity (hash+数状数组)
这个题,做出来的人很多,我感觉是数据不够强,我看了很多人的代码直接暴力也能过了,直接暴力如果数据够强的话肯定是时间超限,边缘数据不够强.如果和上次一样估计很多人的E会GG.我看到一位OIdalao的代 ...
- HDU 3874 Necklace (数状数组)
题意:求[l, r]区间内不重复的数的和.N个数,M次询问 解:离线处理M次询问,看得别人的思路后才知道的...思维局限在预处理N个数上了... 对M次询问按右区间的值从小到大排序.扫一遍N个数,如果 ...
- HDU 1556 Color the ball (数状数组)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- HDU 1166 敌兵布阵 树状数组小结(更新)
树状数组(Binary Indexed Tree(BIT), Fenwick Tree) 是一个查询和修改复杂度都为log(n)的数据结构.主要用于查询任意两位之间的所有 元素之和,但是每次只能修改一 ...
- 树状数组:新手到大师 from TC
Subscribe 树状数组(Binary Indexed Trees) November 15, 2012 作者:Hawstein 出处:http://hawstein.com/posts/bina ...
- 水饺基情 二维树状数组
水饺基情 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submissi ...
最新文章
- C/S架构程序多种类服务器之间实现单点登录(转)
- MySQL高级能量预警
- python开发安卓程序-如何使用python开发Android手机应用?
- 操作系统——MiniDos
- 摄像头拍摄后对图片进行图像处理-python(空域增强)
- Oracle 数据库误truncate table恢复过程
- SecureCRT配色
- StretchDIBits函数显示图片
- 通信原理学习笔记-第二章《基础知识》
- oracle 文本日期相减,日期相减等于整数的问题
- QT property属性的应用
- 因为毕业半年挣了100万,帅地在CSDN被喷上热榜
- Karl Guttag:谈MicroLED AR光学难点,Mojo Vision还有很多问题
- nginx反向代理和正向代理
- mysql使用简单教程_Mysql使用简单教程(二)_MySQL
- RETHINKING SOFT LABELS FOR KNOWLEDGE DISTIL- LATION: A BIAS-VARIANCE TRADEOFF PERSPECTIVE
- Sass扫码点餐源码 单门店多门店餐饮连锁扫码点餐外卖自提系统源码
- 当限量潮牌遇到 DeFi, 币圈项目社群当投机时尚结合加密基元
- vue 图片转base64格式的方法
- stem教育小学制度管理
热门文章
- 高级JavaScript Day03 | 函数定义和调用、this、严格模式、高阶函数、闭包、递归
- Unity游戏开发中的向量运算-点乘和叉乘
- 自然语言处理(一)——文法(形式语言)基本概念
- 中国传媒大学计算机与网络安全学院研究生,林卫国 - 中国传媒大学 - 计算机与网络空间安全学院...
- 51nod 1693 水群(思维,最短路,spfa)
- 年前找Java实习面试经历
- Facebook把服务27亿人的AI硬件系统开源了
- redhat7安装oracle11gR2之动手安装
- Oracle数据库的毗邻
- 最新《ApplePay支付》接入