牛客多校第五场-D-inv
链接:https://www.nowcoder.com/acm/contest/143/D
来源:牛客网
题目描述
输入描述:
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≤ 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的更多相关文章
- 牛客多校第五场 F take
链接:https://www.nowcoder.com/acm/contest/143/F来源:牛客网 题目描述 Kanade has n boxes , the i-th box has p[i] ...
- 牛客多校第五场 J:Plan
链接:https://www.nowcoder.com/acm/contest/143/J 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...
- 牛客多校第五场 F take 期望转化成单独事件概率(模板) 树状数组
链接:https://www.nowcoder.com/acm/contest/143/F来源:牛客网 Kanade has n boxes , the i-th box has p[i] proba ...
- 牛客多校第五场 E room 二分图匹配 KM算法模板
链接:https://www.nowcoder.com/acm/contest/143/E来源:牛客网 Nowcoder University has 4n students and n dormit ...
- 字符串dp——牛客多校第五场G
比赛的时候脑瘫了没想出来..打多校以来最自闭的一场 显然从s中选择大于m个数组成的数必然比t大,所以只要dp求出从s中选择m个数大于t的方案数 官方题解是反着往前推,想了下反着推的确简单,因为高位的数 ...
- 【魔改】树状数组 牛客多校第五场I vcd 几何+阅读理解
https://www.nowcoder.com/acm/contest/143/I vc-dimension 题解:分三种情况,组合数学算一下,其中一种要用树状数组维护 技巧(来自UESTC):1. ...
- 2018牛客多校第五场 H.subseq
题意: 给出a数组的排列.求出字典序第k小的b数组的排列,满足1<=bi<=n,bi<bi+1,a[b[i]]<a[b[i+1]],m>0. 题解: 用树状数组倒着求出以 ...
- 2018牛客多校第五场 E.room
题意: 一共有n个宿舍,每个宿舍有4个人.给出第一年的人员分布和第二年的人员分布,问至少有多少人需要移动. 题解: 对于第一年的每个宿舍,向今年的每种组合连边.流量为1,费用为(4 - 组合中已在该宿 ...
- generator 1(2019年牛客多校第五场B题+十进制矩阵快速幂)
目录 题目链接 思路 代码 题目链接 传送门 思路 十进制矩阵快速幂. 代码 #include <set> #include <map> #include <deque& ...
随机推荐
- 20届的阿里 头条 网易 滴滴 百度 小米等Java面经
转载连接 个人博客:junxuelian.cn 总结:个人感觉回答面试官问题不必太官方和书面化,腾讯sng招实习被发现照着百度百科念.结果可想而知.用自己的话和理解去回答就好.可能应届生会抱怨设计题, ...
- 创建https证书
第一个里程碑:创建https证书 创建文件认证目录 mkdir /application/nginx/key/ -p 在认证目录下创建认证文件 openssl req -new -x509 -node ...
- 【转载】java byte转十六进制
public static String bytes2HexString(byte[] b) { String ret = ""; for (int i = 0; i < b ...
- js经典试题之原型与继承
js经典试题之原型与继承 1:以下代码中hasOwnProperty的作用是? var obj={} …….. obj.hasOwnProperty("val") 答案:判断obj ...
- 20172332 实验一《Java开发环境的熟悉》实验报告
20172332 2017-2018-2 <程序设计与数据结构>实验一报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 于欣月 学号:20172332 实验教师:王 ...
- LintCode-140.快速幂
快速幂 计算an % b,其中a,b和n都是32位的整数. 样例 例如 231 % 3 = 2 例如 1001000 % 1000 = 0 挑战 O(logn) 标签 分治法 code class S ...
- 3dContactPointAnnotationTool开发日志(二四)
添加了清空2d接触点的按钮,将输出的2d接触点的单位变成了像素,原点在图像的左下角. 对于obj文件的适配更加多样化了.
- 3ds Max学习日记(二)
搞了一天终于把第二章弄完了,虽然有点慢,但也是没有办法,毕竟中途学累了总得放松一下吧. 又get到了一个新知识点,是关于3ds max的捕捉工具的,详情见3DS MAX 学习笔记 一(捕捉工具 ...
- server2003 必要的系统优化和安全设置
修改远程桌面端口: Windows 2003系统中的远程终端服务是一项功能非常强大的服务,同时也成了入侵者长驻主机的通道,入侵者可以利用一些手段得到管理员账号和密码并入侵主机.下面,我们来看看如何通过 ...
- 网络编程--System.Net
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...