题目

洛谷等许多 \(OJ\) 都有

思路

考试题,今日无意又做了一次

然后发现自己读错题了······

其实询问时只要 \(k\) 轮排序后的逆序对个数并不需要真的对序列进行更改

很显然 \(k\) 轮操作后每一个位置产生逆序对个数比 \(k\) 小的都没了,比 \(k\) 大的都减了 \(k\)

那么我们只要求每一个位置产生逆序对个数比 \(k\) 大的所有的和减去他们的个数乘 \(k\) 就好了

所以只要对交换时的两个数进行分类讨论,分别算下他们交换后对逆序对个数的影响就行了

开树状数组维护,一个记贡献的和,一个记个数(权值为下标)

\(Code\)

#include<cstdio>
#include<iostream>
#include<cstring>
#define LL long long
using namespace std; const int N = 2e5 + 5;
int n , m , p[N] , num[N]; struct BIT{
LL c[N];
int lowbit(int x){return x & (-x);}
void add(int x , int v){for(; x <= n; x += lowbit(x)) c[x] += v;}
LL query(int x)
{
LL res = 0;
for(; x; x -= lowbit(x)) res += c[x];
return res;
}
}a , b; int main()
{
scanf("%d%d" , &n , &m);
for(register int i = 1; i <= n; i++)
{
scanf("%d" , &p[i]);
num[i] = a.query(n) - a.query(p[i]);
a.add(p[i] , 1);
}
memset(a.c , 0 , sizeof a.c);
for(register int i = 1; i <= n; i++)
if (num[i] != 0) a.add(num[i] , num[i]) , b.add(num[i] , 1);
int t , k;
for(; m; m--)
{
scanf("%d%d" , &t , &k);
if (t == 1)
{
if (p[k] > p[k + 1])
{
if (num[k + 1] != 0) a.add(num[k + 1] , -num[k + 1]) , b.add(num[k + 1] , -1) , num[k + 1]--;
if (num[k + 1] != 0) a.add(num[k + 1] , num[k + 1]) , b.add(num[k + 1] , 1);
}
else{
if (num[k] != 0) a.add(num[k] , -num[k]) , b.add(num[k] , -1);
num[k]++ , a.add(num[k] , num[k]) , b.add(num[k] , 1);
}
swap(p[k] , p[k + 1]) , swap(num[k] , num[k + 1]);
}
else {
if (k >= n)
{
printf("0\n");
continue;
}
printf("%lld\n" , a.query(n) - a.query(k) - (b.query(n) - b.query(k)) * k);
}
}
}

最新文章

  1. MAC下Homebrew的安装
  2. 什么是API
  3. EasyUI DataGrid 添加排序
  4. POJ 1202 Family 概率,DP,高精 难度:2
  5. [改善Java代码]数组的真实类型必须是泛型类型的子类型
  6. oepn sync
  7. 抓取用户openid
  8. LeetCode (85): Maximal Rectangle [含84题分析]
  9. 使用cocoapods后 三方库的头文件没有代码提示?
  10. mysql 转义字符
  11. Fibonacci again and again(SG函数应用)
  12. PyChram简单使用教程
  13. Mac终端的Cocoapods的安装及使用
  14. 清华大学 TUNA 协会
  15. (转)关于linux挂载window下共享文件
  16. Spring IOC 源码分析
  17. 用css实现在横线中间插入文字
  18. C++ 11 nullptr关键字
  19. iOS笔记之AutoresizingMask
  20. 语言基础之description方法

热门文章

  1. goioc:一个使用 Go 写的简易的 ioc 框架
  2. 【接口测试】Postman(一)--接口测试知识准备
  3. 用excel表画一个乐高
  4. 如何在SpringBoot中优雅地重试调用第三方API?
  5. JavaScript:七大基础数据类型:数值number及其表示范围
  6. MongoDB - 模式设计
  7. 手把手教你玩转 Excel 数据透视表
  8. 常用 Git 命令行操作
  9. 51NOD5213A 【提高组/高分-省选预科 第一场【M】】序列
  10. Stream流的特点_只能用一次-Stream流中的常用方法_map