hdu 1394 Minimum Inversion Number(线段树)
参考:http://blog.sina.com.cn/s/blog_691ce2b70101ldmm.html
https://blog.csdn.net/wiking__acm/article/details/7920429
语法:https://zhidao.baidu.com/question/172532047.html
#include <stdio.h>
#include <algorithm> using namespace std; int a[];
struct Node{
int l,r,num;//num该区间已出现数的个数
}tree[]; void Build(int n,int x,int y){
tree[n].l = x;
tree[n].r = y;
tree[n].num = ;
if(x == y){
return;
}
int mid = (x + y) / ;
Build(*n,x,mid);
Build(*n+,mid+,y);
} void Modify(int n,int x){//在输入的相应叶节点加1
int l = tree[n].l;
int r = tree[n].r;
int mid = (l + r) / ;
if(x == l && x == r){
tree[n].num = ;
return;
}
if(x <= mid) Modify(*n,x);
else Modify(*n+,x);
tree[n].num = tree[*n].num + tree[*n+].num;
} int Query(int n,int x,int y){//求大于该数且已经出现的数个数,n节点序号,x左端点,y右端点
int l = tree[n].l;
int r = tree[n].r;
int mid = (l + r) / ;
int ans = ;
if(x == l && y == r)
return tree[n].num;
if(x <= mid) ans += Query(*n,x,min(mid,y));
if(y > mid) ans += Query(*n+,max(mid+,x),y);
return ans;
}
int main(){
int n,sum,ans;
int i,j; while(scanf("%d",&n) != EOF){
sum = ;
Build(,,n-);//区间端点取0~n-1即可
for(i = ;i <= n;i++){
scanf("%d",&a[i]);
Modify(,a[i]);
sum += Query(,a[i]+,n-);
}
ans = sum;
for(i = ;i < n;i++){
sum = sum + (n - - a[i]) - a[i];//根据递推式加上接下来依次循环的序列的逆序数
if(sum < ans)
ans = sum;//要最小的
}
printf("%d\n",ans);
}
}
hdu 1394 Minimum Inversion Number(线段树)的更多相关文章
- HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对)
HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对) 题意分析 给出n个数的序列,a1,a2,a3--an,ai∈[0,n-1],求环序列中逆序对 ...
- hdu - 1394 Minimum Inversion Number(线段树水题)
http://acm.hdu.edu.cn/showproblem.php?pid=1394 很基础的线段树. 先查询在更新,如果后面的数比前面的数小肯定会查询到前面已经更新过的值,这时候返回的sum ...
- [HDU] 1394 Minimum Inversion Number [线段树求逆序数]
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- HDU 1394 Minimum Inversion Number(线段树 或 树状数组)
题目大意:给出从 0 到 n-1 的整数序列,A0,A1,A2...An-1.可将该序列的前m( 0 <= m < n )个数移到后面去,组成其他的序列,例如当 m=2 时,得到序列 A2 ...
- HDU 1394 Minimum Inversion Number 线段树
题目: http://acm.hdu.edu.cn/showproblem.php?pid=1394 没看到多组输入,WA了一万次...... 其实很简单,有人暴力过得,我感觉归并排序.二叉排序树求逆 ...
- HDU 1394 Minimum Inversion Number (树状数组)
题目链接 Problem Description The inversion number of a given number sequence a1, a2, ..., an is the numb ...
- hdu 1394 Minimum Inversion Number (树状数组求逆序对)
The inversion number of a given number sequence a1, a2, ..., an is the number of pairs (ai, aj) that ...
- HDU 1394 Minimum Inversion Number(树状数组/归并排序实现
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- hdu 1394 Minimum Inversion Number(树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 题意:给你一个0 — n-1的排列,对于这个排列你可以将第一个元素放到最后一个,问你可能得到的最 ...
- hdu 13394 Minimum Inversion Number 线段树
题意: 首先给你一个长度为n的序列v,你需要首先找出来逆序对(i<j && v[i]>v[j]) 然后把这个序列的最后一个元素放在第一个位置上,其他元素都向后移动一位. 一 ...
随机推荐
- c#利用三层架构做一个简单的登录窗体
就个人而言,三层架构有点难理解,不知道该如何下手,各层与各层之间怎么调用 最近一直在研究三层架构,经过网上学习与多方打听写一下自己的心得.有不足之处,可以评论和私聊探讨 言归正传: 三层架构(3-ti ...
- A full JDK must be specified
当你开发就了,你就发现,你遇到了各种奇葩的问题,结果,自己奇葩了. 背景:由于项目需要做安全恢复测试,然后,就搭一个新的库环境去测试: 配置jboss的运行jdk时,结果,蹦出个:A full JDK ...
- 失去光标display=none事件的坑
1.实现效果: 失去光标进行判断,如果内容为空出现提示. 2.页面代码: <tr class="tableform_tr"> <td width="15 ...
- C语言 指向函数的指针
#include <stdio.h> int sum(int a, int b) { int c = a + b; printf("%d + %d = %d\n", a ...
- 使用shell调用python中的函数
最近遇到一个需求,需要通过shell调用python中的一个函数,发现其实也挺简单的: python脚本如下: test.py: import ConfigParser config = Config ...
- BZOJ3053:The Closest M Points(K-D Teee)
Description The course of Software Design and Development Practice is objectionable. ZLC is facing a ...
- BZOJ2730:[HNOI2012]矿场搭建(双连通分量)
Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一 ...
- 使用百度新闻RSS
function getbaidu() { $result=""; //RSS源地址列表数组 $rssfeed = array("http://news.baidu.co ...
- Angularjs实例4
<!DOCTYPE html><html lang="zh-cn" ng-app=""><head><meta htt ...
- linux命令进阶及和windows进行文件传输的所有方式
1.图例 ------>原图出处 2. 结构图 根目录说明 3.linux相关命令 cd(change directory切换目录): cd /. 进入根目录 cd .. 返回上一次目录 cd ...