【线段树求逆序数】【HDU1394】Minimum Inversion Number
题目大意:
随机给你全排列中的一个,但不断的把第一个数丢到最后去,重复N次,形成了N个排列,问你这N个排列中逆序数最小为多少
做法:
逆序数裸的是N^2 利用线段树可以降到NlogN
具体方法是插入一个数,查询之前比他大的数有多少个,即query(A[i]+1,N,1,N,1),利用线段树保存区间和即可;
至于不断把一个数丢到最后,可以用O(1)的时间来处理 即 temp=temp-A[i]+(N-A[i]-1); 这个地方很容易思考的 不解释了
完整代码如下:
/*
1.WA 忘记初始化线段树
*/
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <ctime>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#define oo 0x13131313
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define maxn 5555
int tree[maxn*4];
int N;
int A[maxn];
void input()
{
for(int i=1;i<=N;i++)
scanf("%d",&A[i]);
}
int PushUp(int rt)
{
tree[rt]=tree[rt<<1]+tree[rt<<1|1];
}
int updata(int p,int k,int l,int r,int rt)
{
int m;
if(l==r) {tree[rt]+=k;return 0;}
m=(l+r)>>1;
if(p<=m) updata(p,k,lson);
else updata(p,k,rson);
PushUp(rt);
}
int query(int L,int R,int l,int r,int rt)
{
int temp=0,m;
if(L<=l&&r<=R) return tree[rt];
m=(l+r)>>1;
if(L<=m) temp=temp+query(L,R,lson);
if(R>m) temp=temp+query(L,R,rson);
return temp;
}
void solve()
{
int ans=0x3f3f3f3f;
int temp=0;
for(int i=1;i<=N;i++)
{
temp=temp+query(A[i]+1,N,1,N,1);
updata(A[i],1,1,N,1);
}
ans=temp;
for(int i=1;i<=N-1;i++)
{
temp=temp-A[i]+(N-A[i]-1);
if(temp<ans) ans=temp;
}
printf("%d\n",ans);
}
int main()
{
while(cin>>N)
{
memset(tree,0,sizeof(tree));
input();
solve();
}
}
【线段树求逆序数】【HDU1394】Minimum Inversion Number的更多相关文章
- HDU_1394_Minimum Inversion Number_线段树求逆序数
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- 线段树-最小逆序数hdu1394
title: 线段树-最小逆序数 date: 2018-10-12 17:19:16 tags: acm 算法 刷题 categories: ACM-线段树 概述 这是一道简单的线段树的题,,,当然还 ...
- HDU-1394 Minimum Inversion Number(线段树求逆序数)
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- hdu1394 Minimum Inversion Number (线段树求逆序数&&思维)
题目传送门 Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- 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 ...
- 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 (Java/Ot ...
- <Sicily>Inversion Number(线段树求逆序数)
一.题目描述 There is a permutation P with n integers from 1 to n. You have to calculate its inversion num ...
- 线段树求逆序数方法 HDU1394&&POJ2299
为什么线段树能够求逆序数? 给一个简单的序列 9 5 3 他的逆序数是3 首先要求一个逆序数有两种方式:能够从头開始往后找比当前元素小的值,也能够从后往前找比当前元素大的值,有几个逆序数就是几. 线段 ...
随机推荐
- cmd用到的基本操作
dir #显示当前目录中的文件和子目录 dir /a #显示当前目录中的文件和子目录,包括隐藏文件和系统文件 a = all dir c: /a:d #显示 C 盘当前目录中的目录 d = direc ...
- 解决struts2配置文件没有提示的问题
1.在WEB-INF下新建一个dtd文件夹 2.将
- linux内存操作----kernel 3.5.X copy_from_user()和copy_to_user()
前面的一篇文章中简单的描写叙述了一下内存映射的内容,http://blog.csdn.net/codectq/article/details/25658813,这篇文章作为用户把内存规划好之后,在用户 ...
- SVN中tag branch trunk用法详解
SVN中tag branch trunk用法详解 2010-05-24 18:32 佚名 字号:T | T 本文向大家简单介绍一下SVN中tag branch trunk用法,SVN中tag bran ...
- RHEL5.8安装Sybase 15.7_x86_64
RHEL5.8安装Sybase 15.7如果您运行的是 RHEL 5 或更高版本,请使用以下设置:kernel.exec-shield = 0kernel.randomize_va_space = 0 ...
- ORACLE物理存储结构
1.查看数据库实例基本信息: SQL> SELECT DBID,NAME,CREATED,LOG_MODE,OPEN_MODE,FORCE_LOGGING,CURRENT_SCN,FLASHBA ...
- spring boot1.3.0版本及以上版本profile指定参数无法被打入
现象:小于1.3.0版本如1.2.6的spring boot, 当指定profile进行参数打入的时候,发现没有问题,但是比如改用1.3.0,1.3.1及其以上版本的时候,发现参数打不进去,经过比对s ...
- 如何安装chrome扩展,以json-handle
读取本地json文件 chrome插件安装 方式一,在线安装 直接插到json-handle地址,添加即可 https://chrome.google.com/webstore/detail/json ...
- MVC调试异常--未能将脚本调试器附加到计算机
32位机: 解决办法:以管理员身份打开CMD,运行:regsvr32.exe "%ProgramFiles(x86)%\Common Files\Microsoft Shared\VS7De ...
- 获取Location
1.连接一个二进制的库用来定位 CoreLocation Build Phases中加号添加 2.对于ios8.0以上的需要配置 NSLocationWhenInUseUsageDescription ...