传送门

题意简述:给出一个序列,支持把ppp~nnn中所有小于等于apa_pap​的‘扯出来排序之后再放回去,要求动态维护全局逆序对。


思路:我们令fif_ifi​表示第iii个位置之后比它大的数的个数,考虑到一个数在排一次序之后fif_ifi​就变成了000,因此等价于每个位置最多修改一次,我们用树状数组先求出fif_ifi​,然后上线段树来暴力修改即可。

代码:

#include<bits/stdc++.h>
#define ri register int
using namespace std;
inline int read(){
	int ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans;
}
typedef long long ll;
const int N=5e5+5,inf=1e9;
int n,m,f[N],a[N],mp[N];
ll sum=0;
namespace Bit{
	int bit[N],lim;
	inline int lowbit(int x){return x&-x;}
	inline void update(int x){for(ri i=x;i<=lim;i+=lowbit(i))++bit[i];}
	inline int query(int x){int ret=0;for(ri i=x;i;i-=lowbit(i))ret+=bit[i];return ret;}
}
namespace SGT{
	#define lc (p<<1)
	#define rc (p<<1|1)
	#define mid (l+r>>1)
	int mn[N<<2];
	inline void pushup(int p){mn[p]=min(mn[lc],mn[rc]);}
	inline void update(int p,int l,int r,int ql,int qr,int k){
		if(mn[p]>k)return;
		if(l==r){mn[p]=inf,sum-=f[l];return;}
		if(qr<=mid)update(lc,l,mid,ql,qr,k);
		else if(ql>mid)update(rc,mid+1,r,ql,qr,k);
		else update(lc,l,mid,ql,mid,k),update(rc,mid+1,r,mid+1,qr,k);
		pushup(p);
	}
	inline void build(int p,int l,int r){
		if(l==r){mn[p]=mp[a[l]];return;}
		build(lc,l,mid),build(rc,mid+1,r),pushup(p);
	}
}
int main(){
	n=read(),m=read();
	for(ri i=1;i<=n;++i)a[i]=mp[i]=read();
	sort(mp+1,mp+n+1),Bit::lim=unique(mp+1,mp+n+1)-mp-1;
	for(ri i=n;i;--i){
		a[i]=lower_bound(mp+1,mp+Bit::lim+1,a[i])-mp;
		Bit::update(a[i]),f[i]=Bit::query(a[i]-1),sum+=f[i];
	}
	SGT::build(1,1,n),cout<<sum<<'\n';
	for(ri i=1,x;i<=m;++i)x=read(),SGT::update(1,1,n,x,n,mp[a[x]]),cout<<sum<<'\n';
	return 0;
}

2019.01.22 bzoj3333: 排队计划(逆序对+线段树)的更多相关文章

  1. HDU 6318.Swaps and Inversions-求逆序对-线段树 or 归并排序 or 离散化+树状数组 (2018 Multi-University Training Contest 2 1010)

    6318.Swaps and Inversions 这个题就是找逆序对,然后逆序对数*min(x,y)就可以了. 官方题解:注意到逆序对=交换相邻需要交换的次数,那么输出 逆序对个数 即可. 求逆序对 ...

  2. 【bzoj3295】[Cqoi2011]动态逆序对 线段树套SBT

    题目描述 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序 ...

  3. 【a703】求逆序对(线段树的解法)

    Time Limit: 10 second Memory Limit: 2 MB 问题描述 给定一个序列a1,a2...an.如果存在i小于j 并且ai大于aj,那么我们称之为逆序对,求给定序列中逆序 ...

  4. 逆序对 线段树&树状数组 (重制版)

    逆序对的定义:长度为n的数组a,求满足i<j时a[i]>a[j]条件的数对个数. 第一次接触这种问题的人可能是更先想到的是n^2去暴力数前面有几个比他大的数. int main() { i ...

  5. 2019.01.19 codeforces893F.Subtree Minimum Query(线段树合并)

    传送门 线段树合并菜题. 题意简述:给一棵带点权的有根树,多次询问某个点ppp子树内距离ppp不超过kkk的点的点权最小值,强制在线. 思路: 当然可以用dfsdfsdfs序+主席树水过去. 然而线段 ...

  6. 2019.01.16 bzoj4399: 魔法少女LJJ(线段树合并)

    传送门 线段树合并菜题(然而findfindfind函数写错位置调了好久) 支持的操作题目写的很清楚了,然后有一个神奇的限制c≤7c\le7c≤7要注意到不然会去想毒瘤线段树的做法. 思路: 这题只有 ...

  7. 2019.01.14 bzoj4530: [Bjoi2014]大融合(线段树合并)

    传送门 线段树合并菜题. 题意简述:nnn个点,支持连边以及查询一个点所在连通块中经过这个点的路径条数,保证这张图时刻为森林. 思路: 先建出所有操作完之后的树统计出dfsdfsdfs序 注意有可能是 ...

  8. AcWing 107. 超快速排序(归并排序 + 逆序对 or 树状数组)

    在这个问题中,您必须分析特定的排序算法----超快速排序. 该算法通过交换两个相邻的序列元素来处理n个不同整数的序列,直到序列按升序排序. 对于输入序列9 1 0 5 4,超快速排序生成输出0 1 4 ...

  9. HDU 1394 Minimum Inversion Number(最小逆序数 线段树)

    Minimum Inversion Number [题目链接]Minimum Inversion Number [题目类型]最小逆序数 线段树 &题意: 求一个数列经过n次变换得到的数列其中的 ...

随机推荐

  1. white-space和word-wrap和word-break所表示的换行和不换行的区别

    一.前言 使得文本换行有很多方式, <br/>标签元素,能够强制使得所在位置文本换行 <p>元素,<div>设定宽度,都可以对文本内容实现自适应换行 对于长单词或者 ...

  2. echarts折线图Demo

    echarts链接:http://echarts.baidu.com/examples/editor.html?c=line-stack 黑底代码:http://gallery.echartsjs.c ...

  3. css浮动知识点(转)

    转自:http://www.cnblogs.com/iyangyuan/archive/2013/03/27/2983813.html 很早以前就接触过CSS,但对于浮动始终非常迷惑,可能是自身理解能 ...

  4. ABAP空格和零的问题

    空格 concatenate wa_detail-zz_mark1 '' '' '' wa_detail-kdmat1 into wa_detail-zz_mark1 separated by spa ...

  5. JD_M案例知识点(移动端)

    # JD_M案例知识点 基础布局+顶部通栏+顶部轮播图+导航栏 知识点 base.css ::before,::after 伪元素 统一设置文字 sans-serif 移动端 的默认字体 font-f ...

  6. Inno Setup自定义安装界面脚本

    ; 脚本由 Inno Setup 脚本向导 生成! ; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档! #define MyAppName "RemoteCard&quo ...

  7. Debug的使用

    1.什么是Debug? Debug是DOS.Windows都提供的实模式(8086方式)程序的调试工具.使用它,可以查看CPU各种寄存器的内容.内存的情况和在机器码级跟踪程序的运行. 我用的是Mac机 ...

  8. rbac集成 权限分配。之角色管理

    权限分配功能拆分: a. 角色管理 b. 用户管理 c. 菜单和权限的管理 d. 批量的权限操作 e. 分配权限 先实现 角色管理: 无非也就是,增删改查: 定义路由, 编写视图. 1.查看角色页面: ...

  9. avalon子孙元素属性监听

    HTML正文: <body ms-controller="ex"> <div class="ms-hover" ms-click=" ...

  10. 9.10 h5日记

    9.10 1.什么是属性 属性是表示某些事物的一些特征 2.属性分为标签属性和样式属性,二者的区别在于哪里 标签属性:<img src="01.jpg" width=&quo ...