【hdu1394】Minimum Inversion Number
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.
consists of two lines: the first line contains a positive integer n (n <=
5000); the next line contains a permutation of the n integers from 0 to
n-1.
single line.
1 3 6 9 0 8 5 7 4 2
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#define MAXN 100000
using namespace std;
int segtree[MAXN*],a[MAXN*];
int n,sum;
void adddata(int now)
{
segtree[now]=segtree[(now<<)]+segtree[(now<<)+];
}
void buildtree(int now,int l,int r)
{
segtree[now]=;
if (l==r) return;
int mid=(l+r)>>;
buildtree((now<<),l,mid);
buildtree((now<<)+,mid+,r);
adddata(now);
}
int query(int now,int l,int r,int begin,int end)
{
if (begin<=l && end>=r) return segtree[now];
int mid=(l+r)>>,ans=;
if (begin<=mid) ans+=query((now<<),l,mid,begin,end);
if (end>mid) ans+=query((now<<)+,mid+,r,begin,end);
return ans;
}
void pointchange(int now,int l,int r,int x,int v)
{
if (l==r) {segtree[now]+=v; return;}
int mid=(l+r)>>;
if (x<=mid) pointchange((now<<),l,mid,x,v);
else pointchange((now<<)+,mid+,r,x,v);
adddata(now);
}
int main()
{
int i;
int minn;
while (~scanf("%d",&n))
{
buildtree(,,n-);
sum=;
for (i=;i<n;i++)
{
scanf("%d",&a[i]);
sum+=query(,,n-,a[i],n- );
pointchange(,,n-,a[i],);
}
minn=sum;
for (i=;i<n;i++)
{
sum+=n-*a[i]-;
minn=min(minn,sum);
}
printf("%d\n",minn);
}
return ;
}
【hdu1394】Minimum Inversion Number的更多相关文章
- 【HDU1394】Minimum Inversion Number(线段树)
大意:n次操作原串查询逆序数,求出所有串中最小的逆序数. 求逆序数属于线段树的统计问题,建立空树,每次进行插点时进行一次query操作即可.n次操作可以套用结论:如果是0到n的排列,那么如果把第一个数 ...
- 【线段树求逆序数】【HDU1394】Minimum Inversion Number
题目大意: 随机给你全排列中的一个,但不断的把第一个数丢到最后去,重复N次,形成了N个排列,问你这N个排列中逆序数最小为多少 做法: 逆序数裸的是N^2 利用线段树可以降到NlogN 具体方法是插入一 ...
- HDU 1394 Minimum Inversion Number(最小逆序数 线段树)
Minimum Inversion Number [题目链接]Minimum Inversion Number [题目类型]最小逆序数 线段树 &题意: 求一个数列经过n次变换得到的数列其中的 ...
- HDU 1394——Minimum Inversion Number——————【线段树单点增减、区间求和】
Minimum Inversion Number Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & ...
- hdu1394(Minimum Inversion Number)线段树
明知道是线段树,却写不出来,搞了半天,戳,没办法,最后还是得去看题解(有待于提高啊啊),想做道题还是难啊. 还是先贴题吧 HDU-1394 Minimum Inversion Number Time ...
- [hdu1394]Minimum Inversion Number(树状数组)
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- HDU-1394 Minimum Inversion Number 线段树+逆序对
仍旧在练习线段树中..这道题一开始没有完全理解搞了一上午,感到了自己的shabi.. Minimum Inversion Number Time Limit: 2000/1000 MS (Java/O ...
- HDU1394 Minimum Inversion Number(线段树OR归并排序)
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- HDU-1394 Minimum Inversion Number(线段树求逆序数)
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
随机推荐
- 【JAVA正则表达式综合练习】
一.治疗口吃. 将字符串“我我我我我我我..........我.......要要要要要..................要要要要...学习习习习.......习习习习习习习习编程程程程程程..... ...
- 报错:1130-host ... is not allowed to connect to this MySql server 开放mysql远程连接 不使用localhost
执行如下命令报错 mysql -uroot -h${hostIp} -p Enter password:********* ERROR (HY000): Host '$hostIp' is not a ...
- CRC校验(转)
CRC即循环冗余校验码(Cyclic Redundancy Check[1] ):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数据 ...
- cocos2dx游戏开发——微信打飞机学习笔记(二)——游戏框架
一.游戏的基本框架: WelcomeScene ——> GameScene ——> GameOverScene || ...
- SQLServer 维护脚本分享(04)服务器角色和数据库角色相关操作
/*------------------------------------------------------------------------------------ [服务器级别-服务器角色] ...
- 解决Eclipse建Maven项目module无法转换为2.3
Maven项目在Project Facets里面修改Dynamic web module为2.3的时候就会出现Cannot change version of project facet Dynami ...
- javascript引擎工作原理
1. 什么是JavaScript解析引擎? 简单地说,JavaScript解析引擎就是能够“读懂”JavaScript代码,并准确地给出代码运行结果的一段程序.比方说,当你写了 var a = 1 + ...
- HDU 2609 最小表示法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2609 题意:给定n个循环链[串],问有多少个本质不同的链[串](如果一个循环链可以通过找一个起点使得和 ...
- 09_IO流
1. IO(Input Output)流 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作数据分为两种: 字节流和字符流 流按类型分 ...
- Codeforces 335C Sorting Railway Cars
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...