Minimum Inversion Number(逆序数)(技巧or树状数组or线段树)
来源:互联网 发布:知荣制衣 联系方式 编辑:程序博客网 时间:2024/05/16 14:22
For a given sequence of numbers a1, a2, ..., an, if we move the first m >= 0 numbers to the end of the seqence, we will obtain another sequence. There are totally n such sequences as the following:
a1, a2, ..., an-1, an (where m = 0 - the initial seqence)
a2, a3, ..., an, a1 (where m = 1)
a3, a4, ..., an, a1, a2 (where m = 2)
...
an, a1, a2, ..., an-1 (where m = n-1)
You are asked to write a program to find the minimum inversion number out of the above sequences.
101 3 6 9 0 8 5 7 4 2
16
转载来之:https://wenku.baidu.com/view/6e02b7492e3f5727a5e9623f.html
代码如下:
#include<stdio.h>
int a[5003];
int main()
{
int n,i,j,sum;
while(scanf("%d",&n)!=EOF)
{
sum=0;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
for(j=1;j<i;j++)
if(a[j]>a[i])
sum++;
}
int ans=sum;
for(i=1;i<=n;i++)
{
sum=sum+(-a[i]+n-1-a[i]);
if(sum<ans)
ans=sum;
}
printf("%d\n",ans);
}
return 0;
}
就是有前面多少个比他大的 就是逆序 所有加起来就是逆序数
接下来是树状数组 转载来自http://www.cnblogs.com/kuangbin/archive/2012/08/15/2639385.html
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int MAXN=5050;
int c[MAXN];
int n;
int lowbit(int x)
{
return x&(-x);
}
void add(int i,int val)
{
while(i<=n)
{
c[i]+=val;
i+=lowbit(i);
}
}
int sum(int i)
{
int s=0;
while(i>0)
{
s+=c[i];
i-=lowbit(i);
}
return s;
}
int a[MAXN];
int main()
{
while(scanf("%d",&n)!=EOF)
{
int ans=0;
memset(c,0,sizeof(c));
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
a[i]++;
ans+=sum(n)-sum(a[i]);
add(a[i],1);
}
int Min=ans;
for(int i=1;i<=n;i++)
{
ans+=n-a[i]-(a[i]-1);
if(ans<Min)Min=ans;
}
printf("%d\n",Min);
}
return 0;
}
- Minimum Inversion Number(逆序数)(技巧or树状数组or线段树)
- HDOJ 1394 Minimum Inversion Number(求逆序数—暴力or线段树or树状数组:单点更新,区间求和)
- hdoj 1394 Minimum Inversion Number 【线段树 or 线段树lazy or 树状数组 or 归并排序】【逆序对】
- HDU 1394 Minimum Inversion Number(线段树/树状数组求逆序数)
- HDU 1394 Minimum Inversion Number(线段树 || 树状数组+逆序数 )
- HDU - 1394 Minimum Inversion Number(树状数组 or 线段树)
- 【树状数组(逆序数)】hdu 1394 Minimum Inversion Number
- HDU 1394 Minimum Inversion Number(树状数组+逆序数)
- hdu 1394 Minimum Inversion Number(树状数组逆序数)
- Hdu 1394-Minimum Inversion Number【暴力求解Or线段树Or树状数组】
- Minimum Inversion Number 求逆序树 线段树||树状数组
- HDU 1394 Minimum Inversion Number(线段树,逆序数)
- 【线段树】Minimum Inversion Number(逆序数的求解)
- HDU 1394 Minimum Inversion Number(线段树+逆序数)
- hdu1394 -Minimum Inversion Number(线段树求逆序数)
- HDOJ 1394 Minimum Inversion Number(逆序数 + 线段树)
- HDOJ 1394 Minimum Inversion Number(线段树+逆序数)
- HDU-1394 Minimum Inversion Number (逆序数,线段树或树状数组)
- 在后台运行shell脚本
- 勾股数
- 【NOIP2017】Day4
- 分布式搜索elasticsearch集群管理工具head
- Day 15:我要逆袭。
- Minimum Inversion Number(逆序数)(技巧or树状数组or线段树)
- V4L2设置摄像头光照,对比度参数
- 5-1 列出连通集 (25分)
- Xamarin.Forms 用户界面——控件——Text——Label
- CentOS MongoDB安装与使用
- Matlab2014a for MAC安装Piotr's Image & Video Matlab Toolbox
- Android 单元测试 Mockito使用详解
- 【GDOI2018模拟8.7】的士碰撞
- 使用Java Rest Client操作Elasticsearch