hdu 1394 Minimum Inversion Number(树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394
题意:给你一个0 — n-1的排列,对于这个排列你可以将第一个元素放到最后一个,问你可能得到的最多逆序对的个数
求出原始序列的逆序对的数目,然后进行n-1次将第一个元素放到最后一个的操作,每次操作后可以用O(1)复杂度求得新序列的逆序对数目
此题的关键点在于求出原始序列逆序对的数目,可以使用树状数组, 线段树, 归并等方法。
下面是树状数组的解法
#include <iostream> #include <cstdio> #include <algorithm> #define maxn 5010 using namespace std;int c[maxn], arr[maxn], n;int lowbit(int x);void add(int x, int u);int sum(int x);int main(void) {while (scanf("%d", &n) != EOF){int ans = 0;memset( c, 0, sizeof(c));for (int i = 0; i < n; ++i){scanf("%d", arr + i);arr[i] += 1;ans += i - sum( arr[i]);add( arr[i], 1);}int pre = ans, tmp;for (int i = 0; i < n - 1; ++i){tmp = pre - (arr[i] - 1) + (n - arr[i]);ans = min( ans, tmp);pre = tmp;}printf("%d\n", ans);}return 0; }int lowbit(int x) {return x&(-x); }int sum(int x) {int result = 0;while (x > 0){result += c[x];x -= lowbit(x);}return result; }void add(int x, int u) {while (x <= n){c[x] += u;x += lowbit(x);} }
转载于:https://www.cnblogs.com/chuninsane/p/4929433.html
hdu 1394 Minimum Inversion Number(树状数组)相关推荐
- HDU - 1394 Minimum Inversion Number(树状数组)
题目链接:点击查看 题目大意:线段树求逆序数,给出的数列可以组成环,问怎么样求可以让逆序数最小,输出最小值 题目分析:看到这个题的第一反应是暴力枚举5000种情况,因为感觉这个题的N给的不是很大,但是 ...
- HDU 1394 Minimum Inversion Number(线段树的单点更新)
点我看题目 题意 :给你一个数列,a1,a2,a3,a4.......an,然后可以求出逆序数,再把a1放到an后,可以得到一个新的逆序数,再把a2放到a1后边,,,,,,,依次下去,输出最小的那个逆 ...
- 逆序数2 HDOJ 1394 Minimum Inversion Number
题目传送门 1 /* 2 求逆序数的四种方法 3 */ 1 /* 2 1. O(n^2) 暴力+递推 法:如果求出第一种情况的逆序列,其他的可以通过递推来搞出来,一开始是t[1],t[2],t[3]. ...
- HDU 5517---Triple(二维树状数组)
题目链接 Problem Description Given the finite multi-set A of n pairs of integers, an another finite mult ...
- POJ 3928 hdu 2492 Uva1428 PingPong 【树状数组】
Ping pong Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 3584 Cube (三维树状数组)
Problem Description Given an N*N*N cube A, whose elements are either 0 or 1. A[i, j, k] means the nu ...
- hdu 5157(manacher+前缀和+树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5157 解题思路: 我们可以先用mancher算法对字符串进行处理,把以每个点为中心的回文串半径求出来, ...
- hdu 6447YJJ's Salesman 离散化+树状数组+DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6447 因为图中点的坐标值过大,达到1e9.然而只有1e5个点.所以先将其离散化.并按照<x.y& ...
- [HDU - 2852] KiKi's K-Number (树状数组+二分)
链接 http://acm.hdu.edu.cn/showproblem.php?pid=2852 题意 现在需要你对一个空序列做nnn次操作,操作分三种 0x0\ \ x0 x :向序列中加入一个 ...
- HDU - 5775 - Bubble Sort( 树状数组 + 思维 )
题目链接:点击进入 题目 题意 问在给出的冒泡排序过程中,一个数到达的最右边位置与最左边位置距离差. 思路 对于一个数,位置 i ,假设右边比它小的数有 r 个,左边比它大的数有 l 个,最右边到达的 ...
最新文章
- 教你如何运用python实现学生信息管理系统
- Table '' is marked as crashed and should be repaired 解决方法
- 【NLP】CS224N课程笔记|词向量I: 简介, SVD和Word2Vec
- 分布式系统关注点(9)——想通关「限流」?只要这一篇
- Eclipse+MyEclipse+Tomcat平台搭建步骤
- VC++静态文本框/PICTURE控件的notify属性
- java-servlet
- 推送ActivityFeed到Teams
- WebApp 里Meta标签大全
- Apriori进行关联分析
- Bootstrap页面布局17 - BS选项卡
- Spring学习总结(14)——Spring10种常见异常解决方法
- 区块链现状:最初的炒作消退,将迎来大量新应用(第一部分)
- 封城第12日,冰箱都快塞不下咯(附菜谱分享)
- 看图说话,FastJson 并没有那么流行!
- 微波烹调,营养损失多or少?
- nuxt 中 vuex 路由鉴权 keeplive
- 外卖订单语音通知功能如何实现?(附外卖订单语音通知模板)
- 常见计算机类杂志投稿方式
- matlab去除图片水印_求帮忙,我想找到用matlab编程的数字水印系统,可以实现给图片加水印,并且防止攻击,最后提取水印信息...
热门文章
- java原码、补码、反码总结
- [LeetCode]50.Pow(x, n)
- Android进程与线程基本知识
- 推荐几个rpm下载站点
- Nginx 的 server_names_hash_bucket_size 问题
- 7 centos 查看程序文件数量_MongoDB最大连接数(centos7应用程序最大打开文件数)设置失效的异常分析过程与解决方法...
- Unity app调试
- ZMQ == 服务端创建,接受请求的过程
- vue 第二天(常用指令及插值语法)
- python linux开发_python之Linux开发环境安装