20200307 NOI Online T2 冒泡排序(逆序对)

博客详细解析了NOI Online提高组竞赛中的冒泡排序问题,包括题目描述、操作类型、数据范围及思路分析。重点讨论了如何计算经过多次冒泡排序后的逆序对数量,提出利用树状数组来高效地处理这个问题,并给出了代码实现。
摘要由CSDN通过智能技术生成

T2 [NOI Online 提高组]冒泡排序

[NOI Online 提高组]冒泡排序


题目描述

给定一个 1 ∼ n 1 ∼ n 1n 的排列 p i p_i pi,接下来有 m 次操作,操作共两种:

  1. 交换操作:给定 x,将当前排列中的第 x 个数与第 x + 1 x+1 x+1 个数交换位置。
  2. 询问操作:给定 k,请你求出当前排列经过 k 轮冒泡排序后的逆序对个数。 对一个长度为 n 的排列 p i p_i pi 进行一轮冒泡排序的伪代码如下:
for i = 1 to n-1:
  if p[i] > p[i + 1]:
    swap(p[i], p[i + 1])

输入格式

第一行两个整数 n, m,表示排列长度与操作个数。

第二行 n 个整数表示排列 p i p_i pi

接下来 m 行每行两个整数 t i t_i ti , c i c_i ci,描述一次操作:

  • t i = 1 t_i=1 ti=1,则本次操作是交换操作, x = c i x=c_i x=ci

  • t i = 2 t_i=2 ti=2,则本次操作是询问操作, k = c i k=c_i k=ci


输出格式

对于每次询问操作输出一行一个整数表示答案。


输入输出样例

输入

3 6
1 2 3
2 0
1 1
1 2
2 0
2 1
2 2

输出

0
2
1
0


说明/提示

样例一解释

第一次操作:排列为 { 1 , 2 , 3 } \{1,2,3\} { 1,2,3},经过 0 轮冒泡排序后为 { 1 , 2 , 3 } \{1,2,3\} { 1,2,3},0 个逆序对。

第二次操作:排列变为 { 2 , 1 , 3 } \{2,1,3\} { 2,1,3}

第三次操作:排列变为 { 2 , 3 , 1 } \{2,3,1\} { 2,3,1}

第四次操作:经过 0 轮冒泡排序后排列变为 { 2 , 3 , 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值