HDUOJ---1754 Minimum Inversion Number (单点更新之求逆序数)
Minimum Inversion Number
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 9342 Accepted Submission(s): 5739
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.
//线段树实现单点更新,并求和
#include<stdio.h>
#define maxn 5001
struct node{
int lef,rig,sum;
int mid(){ return lef+((rig-lef)>>) ;}
};
node seg[maxn<<];
int aa[maxn+];
void build(int left,int right,int p )
{
seg[p].lef=left;
seg[p].rig=right;
seg[p].sum=;
if(left==right) return ;
int mid=seg[p].mid();
build(left,mid,p<<);
build(mid+,right,p<<|);
}
void updata(int pos,int p,int val)
{
if(seg[p].lef==seg[p].rig)
{
seg[p].sum+=val;
return ;
}
int mid=seg[p].mid();
if(pos<=mid) updata(pos,p<<,val);
else updata(pos,p<<|,val);
seg[p].sum=seg[p<<].sum+seg[p<<|].sum;
}
int query(int be ,int en,int p)
{
if(be<=seg[p].lef&&seg[p].rig<=en)
return seg[p].sum;
int mid=seg[p].mid();
int res=;
if(be<=mid) res+=query(be ,en ,p<<);
if(mid<en) res+=query(be ,en ,p<<|);
return res;
}
int main()
{
int nn,i,ans;
while(scanf("%d",&nn)!=EOF)
{
ans=;
build(,nn-,);
for(i=;i<=nn;i++)
{
scanf("%d",&aa[i]);
updata(aa[i],,);
if(aa[i]!=nn-) ans+=query(aa[i]+,nn-,); //统计比其大的数
}
int min=ans;
for(i=;i<=nn;i++)
{
ans+=nn-*aa[i]-;
if(min>ans) min=ans;
}
printf("%d\n",min);
}
return ;
}
HDUOJ---1754 Minimum Inversion Number (单点更新之求逆序数)的更多相关文章
- HDU 1394 Minimum Inversion Number ( 树状数组求逆序数 )
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 Minimum Inversion Number ...
- HDU - 1394 Minimum Inversion Number (线段树求逆序数)
Description The inversion number of a given number sequence a1, a2, ..., an is the number of pairs ( ...
- HDU-1394 Minimum Inversion Number(线段树求逆序数)
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- Minimum Inversion Number(线段树求逆序数)
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- hdu1394 Minimum Inversion Number (线段树求逆序数&&思维)
题目传送门 Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- hdu 1394 Minimum Inversion Number 【线段树求逆序数】
之前写过树状数组的,再用线段树写一下--- #include<cstdio> #include<cstring> #include<iostream> #inclu ...
- HDU - 1394 Minimum Inversion Number(线段树求逆序数---点修改)
题意:给定一个序列,求分别将前m个数移到序列最后所得到的序列中,最小的逆序数. 分析:m范围为1~n,可得n个序列,求n个序列中最小的逆序数. 1.将序列从头到尾扫一遍,用query求每个数字之前有多 ...
- hdu1394--Minimum Inversion Number(线段树求逆序数,纯为练习)
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- <Sicily>Inversion Number(线段树求逆序数)
一.题目描述 There is a permutation P with n integers from 1 to n. You have to calculate its inversion num ...
随机推荐
- Ganglia开源集群监视项目
Ganglia是UC Berkeley发起的一个开源集群监视项目,设计用于测量数以千计的节点.Ganglia的核心包含gmond.gmetad以及一个Web前端.主要 是用来监控系统性能,如:cpu ...
- QT vs x64编译
下载qt-everywhere-opensource-src-5.3.0 这个设置非常重要,不对的话,一大堆编译错误,已经折腾了好多回了 configure -mp -confirm-license ...
- Sqrt(int x) leetcode java
Reference: http://blog.csdn.net/lbyxiafei/article/details/9375735 题目: Implement int sqrt(int x). Co ...
- Managed Debugging Assistant 'PInvokeStackImbalance' has detected a problem in 解决方案
because regular C functions work differently than the Windows API functions; their "calling con ...
- 【PAT Advanced Level】1013. Battle Over Cities (25)
这题给定了一个图,我用DFS的思想,来求出在图中去掉某个点后还剩几个相互独立的区域(连通子图). 在DFS中,每遇到一个未访问的点,则对他进行深搜,把它能访问到的所有点标记为已访问.一共进行了多少次这 ...
- ObservableCollection
1)可以使绑定控件与基础数据源保持同步2)还可以在您添加.删除.移动.刷新或替换集合中的项目时引发 CollectionChanged 事件3)还可以在您的窗口以外的代码修改基础数据时做出反应4)相互 ...
- 历尽折腾,终于把Unity3D 的demo发布安卓啦(问题)
只要碰到两个比较蛋疼的问题: 1. Error generating final archive: Debug certificate expired on **** 从字面了解,是由于Debug证书 ...
- [Node.js]23. Level 4: Semantic versioning
Update the versions on your dependencies to be a little more flexible, adding the ~ in front of your ...
- jquery设置按钮disabled
通常我们设置disabled属性会用attr和removeAttr,但是今天我们不讨论这个方式 我们讨论是的prop jQuery的定义是:获取在匹配的元素集中的第一个元素的属性值. 随着一些内置属性 ...
- C#.NET常见问题(FAQ)-如何把函数名作为参数传递给另一个函数
在主窗体中使用的还是普通的函数,但是test函数有一个新的参数,就是method 这个method所指向的就是前面委托定义的method 更多教学视频和资料下载,欢迎关注以下信息: 我的优 ...