链接:https://www.nowcoder.com/acm/contest/143/D
来源:牛客网

题目描述

Kanade has an even number n and a permutation b of all of the even numbers in [1,n]
Let a denote an array [1,3,5....n-1] , now you need to find a permutation of [1,n] satisfy both a and b are subsequence of it and minimize the number of inverse pair of it.

输入描述:

The first line has a positive even integer n

The second line has n/2 positive even integers b[i]

输出描述:

Output the number of inverse pair of the permutation you find.

输入例子:
6
2 6 4
输出例子:
2

-->

示例1

输入

复制

6
2 6 4

输出

复制

2

说明

[1,2,3,5,6,4]

备注:

1≤ n≤ 2e5
题意就是给你1-n之间所有偶数的一个排列,让你把奇数插入进去,使得生成的数列的逆序数最少。

为了使得逆序数最少,所有的奇数肯定是有序插入的,因此插入的位置肯定也是递增的。
对每个奇数找到插入之后产生逆序数最少的位置插入即可。 考虑用c[i]表示将当前奇数 2k+ 插入第i个位置时,产生的逆序数。
那么对于 (k+) + 来说,c数组的变化其实是非常小的。
对于所有在 (k+) 这个数字之前的位置来说,放2(k+)+1比放2k+1会多一个逆序数,而在它之后的位置会少一个。 因此用线段树维护c数组,每次选择逆序数最少的位置放即可。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2e5+;
int n,m;
int c[N],mn[N*],lazy[N*],t[N*],b[N],pos[N];
ll ans;
int lowbit(int x)
{
return x&(-x);
}
void add(int x)
{
for (int i=x;i<=n;i+=lowbit(i))
t[i]++;
}
int sum(int x)
{
int ret=;
for (int i=x;i>=;i-=lowbit(i))
ret+=t[i];
return ret;
}
void PushUp(int s)
{
mn[s]=min(mn[s<<],mn[s<<|]);
}
void PushDown(int s,int lenl,int lenr)
{
if (lazy[s])
{
mn[s<<]+=lazy[s];
mn[s<<|]+=lazy[s];
lazy[s<<]+=lazy[s];
lazy[s<<|]+=lazy[s];
lazy[s]=;
}
}
void build(int s,int l,int r)
{
if (l==r)
{
mn[s]=c[l];
return ;
}
int mid=(l+r)>>;
build(s<<,l,mid);
build(s<<|,mid+,r);
PushUp(s);
}
void Updata(int s,int l,int r,int L,int R,int val)
{
if (L<=l&&r<=R)
{
mn[s]+=val;
lazy[s]+=val;
return ;
}
int mid=(l+r)>>;
PushDown(s,mid-l+,r-mid);
if (L<=mid) Updata(s<<,l,mid,L,R,val);
if (R>mid) Updata(s<<|,mid+,r,L,R,val);
PushUp(s);
}
int main()
{
scanf("%d",&n);
int m=n/;
for (int i=;i<=m;i++)
{
scanf("%d",&b[i]);
pos[b[i]]=i;
add(b[i]);
ans+=i-sum(b[i]);
} m++;
for (int i=;i<=m+;i++) c[i]=i-;
build(,,m);
for (int i=;i<=n;i+=)
{
Updata(,,m,,pos[i-],);
Updata(,,m,pos[i-]+,m,-);
ans+=mn[];
} printf("%lld\n",ans);
return ;
}

牛客多校第五场-D-inv的更多相关文章

  1. 牛客多校第五场 F take

    链接:https://www.nowcoder.com/acm/contest/143/F来源:牛客网 题目描述 Kanade has n boxes , the i-th box has p[i] ...

  2. 牛客多校第五场 J:Plan

    链接:https://www.nowcoder.com/acm/contest/143/J 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...

  3. 牛客多校第五场 F take 期望转化成单独事件概率(模板) 树状数组

    链接:https://www.nowcoder.com/acm/contest/143/F来源:牛客网 Kanade has n boxes , the i-th box has p[i] proba ...

  4. 牛客多校第五场 E room 二分图匹配 KM算法模板

    链接:https://www.nowcoder.com/acm/contest/143/E来源:牛客网 Nowcoder University has 4n students and n dormit ...

  5. 字符串dp——牛客多校第五场G

    比赛的时候脑瘫了没想出来..打多校以来最自闭的一场 显然从s中选择大于m个数组成的数必然比t大,所以只要dp求出从s中选择m个数大于t的方案数 官方题解是反着往前推,想了下反着推的确简单,因为高位的数 ...

  6. 【魔改】树状数组 牛客多校第五场I vcd 几何+阅读理解

    https://www.nowcoder.com/acm/contest/143/I vc-dimension 题解:分三种情况,组合数学算一下,其中一种要用树状数组维护 技巧(来自UESTC):1. ...

  7. 2018牛客多校第五场 H.subseq

    题意: 给出a数组的排列.求出字典序第k小的b数组的排列,满足1<=bi<=n,bi<bi+1,a[b[i]]<a[b[i+1]],m>0. 题解: 用树状数组倒着求出以 ...

  8. 2018牛客多校第五场 E.room

    题意: 一共有n个宿舍,每个宿舍有4个人.给出第一年的人员分布和第二年的人员分布,问至少有多少人需要移动. 题解: 对于第一年的每个宿舍,向今年的每种组合连边.流量为1,费用为(4 - 组合中已在该宿 ...

  9. generator 1(2019年牛客多校第五场B题+十进制矩阵快速幂)

    目录 题目链接 思路 代码 题目链接 传送门 思路 十进制矩阵快速幂. 代码 #include <set> #include <map> #include <deque& ...

随机推荐

  1. Hybrid APP基础篇(五)->JSBridge实现示例

    说明 JSBridge实现示例 目录 前言 参考来源 楔子 JS实现部分 说明 实现 Android实现部分 说明 JSBridge类 实现 Callback类 实现 Webview容器关键代码 实现 ...

  2. 浮点数(floating-point number)二进制存储格式

    定义 浮点数就是小数点位置不固定的数,也就是说与定点数不一样,浮点数的小数点后的小数位数可以是任意的,根据IEEE754-1985(也叫IEEE Standard for Binary Floatin ...

  3. Thunder团队第六周 - Scrum会议2

    Scrum会议2 小组名称:Thunder 项目名称:i阅app Scrum Master:宋雨 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李传康 ...

  4. 阿里云服务器 操作实战 部署C语言开发环境(vim配置,gcc) 部署J2EE网站(jdk,tomcat)

    . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835 . 博客总结 : 设置SecureCRT ...

  5. iOS开发本地通知

    /* 本地通知:不通过网络,在本地实现的通知,自己发给自己 远程通知:必须通过网络,使用推送技术(APNs),实现通知 本地通知: 1.要完成可以接收的通知形式的注册 2.具体通知的设置 3.发送通知 ...

  6. PagedDataSource数据绑定控件和AspNetPager分页控件结合使用列表分页

    1.引用AspNetPager.dll. 2.放置Repeater数据绑定控件. <asp:Repeater ID="Repeater1" runat="serve ...

  7. jenkins部署springboot多项目

    war包的部署问题不大,这里记录jar包的部署过程: 1:jar包的体积过大问题 pom.xml参考以下配置(依赖包会分离到target/lib/,jar包体积由几十M缩小到几k) <build ...

  8. [剑指Offer] 45.扑克牌顺子

    题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决 ...

  9. WPF实例,以getFiles()获取文件夹,treeview的应用

    读取电脑硬盘根目录添加到TreeView控件 foreach (DriveInfo item in System.IO.DriveInfo.GetDrives()) { if(item.ToStrin ...

  10. Log-spectral distance

    Log-spectral distance对数频谱距离 log-spectral distance(LSD),也指 log-spectral distortion,是两个频谱之间的距离度量(用分贝表示 ...