HDU 1394 Minimum Inversion Number 线段树
题目: http://acm.hdu.edu.cn/showproblem.php?pid=1394
没看到多组输入,WA了一万次。。。。。。
其实很简单,有人暴力过得,我感觉归并排序、二叉排序树求逆序数都可以,但是我没写。
#include <stdio.h>
#include <string.h> const int MAXN = ; struct Tree_Node
{
int left, right;
int num;
} tree[MAXN<<]; void build(int left, int right, int step)
{
tree[step].left = left;
tree[step].right = right;
tree[step].num = ;
if(left == right)
return;
int mid = (left + right) >> ;
build(left, mid, step<<);
build(mid+, right, step<<|);
} void insert(int cur, int step)
{
if(cur >= tree[step].left && cur <= tree[step].right)
tree[step].num++;
if(tree[step].left == tree[step].right)
return;
int mid = (tree[step].left + tree[step].right) >> ;
if(cur <= mid)
insert(cur, step<<);
else
insert(cur, step<<|);
} int query(int left, int right, int step)
{
if(tree[step].left == left && tree[step].right == right)
{
return tree[step].num;
}
int mid = (tree[step].left + tree[step].right) >> ;
if(right <= mid)
{
return query(left, right, step<<);
}
else if(left > mid)
{
return query(left, right, step<<|);
}
else
{
return query(left, mid, step<<) + query(mid+, right, step<<|);
}
} int main()
{
int n, x[MAXN];
while(scanf("%d", &n) != EOF)
{
int ans = ;
build(, n, );
for(int i = ; i < n; i++)
{
scanf("%d", &x[i]);
ans += query(x[i]+, n, );
insert(x[i], );
}
int tmp = ans;
for(int i = ; i < n; i++)
{
tmp += n - x[i] - x[i] - ;
if(tmp < ans)ans = tmp;
}
printf("%d\n", ans);
}
return ;
}
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 (树状数组)
题目链接 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]) 然后把这个序列的最后一个元素放在第一个位置上,其他元素都向后移动一位. 一 ...
随机推荐
- wechat server的配置
一 服务器地址 https://github.com/donal-tong/wechat4server 包括源代码及数据库脚本放在dump文件夹里 1.根据sql脚本创建需要的数据库hcapi,然后命 ...
- tomcat安全配置之证书密码加密存储
最近项目组要完成一个新Web Servicer接口的开发,其中有项要求是支持外部客户程序以https方式访问这些SOAP接口.项目组当前基于tomcat6.0.29开发,axis版本为1.4.拿到这个 ...
- [ES6] 21. ESNext, ES6-Shim & Node
ES-Next: Esnextis similar to traceur, you can use command line to compile files. Install: npm instal ...
- JSON返回的自定义
当返回json格式的数据时,不想自己组织结果集,可以利用类的call方法. json类: <?php class Json { private $_data; public function _ ...
- Iperf使用方法
Iperf使用方法 Iperf 是一个网络性能测试工具.Iperf可以测试TCP和UDP带宽质量.Iperf可以测量最大TCP带宽,具有多种参数和UDP特性.Iperf可以报告带宽,延迟抖动和数据包 ...
- magento 数据结构
首先要知道是EAV模式,这种结构要比普通数据结构更容易扩展,但是带来的就是查询速度慢,好在magento的缓存机制不错 最重要的3张表eav_entity_type,eav_entity_attrib ...
- iframe父子窗口取值
父窗口中操作iframe:window.frames["iframeChild"].document //假如iframe的id为iframeChild 在子窗口中操作父窗口:wi ...
- VS2012 直接浏览网页时报错
VS2012 直接浏览网页时报错 "托管管道模式不能为集成" 只要在configuration文件里面添加 <system.webServer> < ...
- BS开发平台,一小时搞定功能强大的统计分析页面
BS开发平台,一小时搞定功能强大的统计分析页面,拥有强大的功能和详细的权限控制. 1.组织数据,分析需求(实际耗时大约20分钟) 2.建立需要的业务数据表(大致10分钟)3. 运行代码工具,生产需要 ...
- 20160406javaweb JDBC 实例工具类
一.建立静态的数据库配置文件: config.properties driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/datab ...