分析

近乎裸的 \(cdq\) 分治数点问题

我们考虑一个数被删去,它对删后区间逆序对个数的影响就是减去现存序列中前面比它大的个数再减去现存序列中后面比它小的个数

那么我们考虑如何处理时间限制

既然是“现存序列中”,也就是说删去时间比它晚的

那么能产生贡献的数对 \((i,j)\) 就要满足 \(i < j,val_i > val_j,time_i > time_j\)

这是前面的贡献

而后面的贡献同理,所以我们在每轮分治中算左区间对右区间的贡献以及右区间对左区间的贡献

注意:删后还没删完的若干个数我们让它们的删去时间依次递增

因为没删完的数可以相互贡献,但我们不能重复算同一个数对

所以我们让时间递增,然后取严格大于来算贡献

\(Code\)

#include<cstdio>
#include<algorithm>
#define LL long long
using namespace std; const int N = 1e5 + 5;
int n , m , rd[N] , ans[N] , c[N] , up; struct node{
int a , b , id;
}f[N]; inline bool cmp(node x , node y){return x.a > y.a;}
inline int lowbit(int x){return x & (-x);}
inline void add(int x , int v){for(; x <= up; x += lowbit(x)) c[x] += v;}
inline int query(int x)
{
int res = 0;
for(; x; x -= lowbit(x)) res += c[x];
return res;
} inline void solve(int l , int r)
{
if (l == r) return;
int mid = (l + r) >> 1;
solve(l , mid) , solve(mid + 1 , r);
sort(f + l , f + mid + 1 , cmp) , sort(f + mid + 1 , f + r + 1 , cmp);
int j = l;
for(register int i = mid + 1; i <= r; i++)
{
while (f[j].a > f[i].a && j <= mid) add(f[j].b , 1) , j++;
ans[f[i].id] += query(up) - query(f[i].b);
}
for(register int i = l; i < j; i++) add(f[i].b , -1);
j = r;
for(register int i = mid; i >= l; i--)
{
while (f[j].a < f[i].a && j >= mid + 1) add(f[j].b , 1) , j--;
ans[f[i].id] += query(up) - query(f[i].b);
}
for(register int i = j + 1; i <= r; i++) add(f[i].b , -1);
} int main()
{
scanf("%d%d" , &n , &m);
for(register int i = 1; i <= n; i++) scanf("%d" , &f[i].a) , rd[f[i].a] = f[i].id = i;
int x;
for(register int i = 1; i <= m; i++) scanf("%d" , &x) , f[rd[x]].b = i;
up = m;
for(register int i = 1; i <= n; i++)
if (!f[i].b) f[i].b = ++up; else rd[f[i].b] = i;
solve(1 , n);
LL res = 0;
for(register int i = 1; i <= n; i++) res += (LL)ans[i];
for(register int i = 1; i <= m; i++) printf("%lld\n" , res) , res -= (LL)ans[rd[i]];
}

【CQOI2011】动态逆序对的更多相关文章

  1. BZOJ 3295: [Cqoi2011]动态逆序对

    3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3865  Solved: 1298[Submit][Sta ...

  2. Bzoj 3295: [Cqoi2011]动态逆序对 分块,树状数组,逆序对

    3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2886  Solved: 924[Submit][Stat ...

  3. bzoj3295[Cqoi2011]动态逆序对 树套树

    3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 5987  Solved: 2080[Submit][Sta ...

  4. P3157 [CQOI2011]动态逆序对(树状数组套线段树)

    P3157 [CQOI2011]动态逆序对 树状数组套线段树 静态逆序对咋做?树状数组(别管归并QWQ) 然鹅动态的咋做? 我们考虑每次删除一个元素. 减去的就是与这个元素有关的逆序对数,介个可以预处 ...

  5. P3157 [CQOI2011]动态逆序对

    P3157 [CQOI2011]动态逆序对 https://www.luogu.org/problemnew/show/P3157 题目描述 对于序列A,它的逆序对数定义为满足i<j,且Ai&g ...

  6. 2018.07.01 BZOJ3295: [Cqoi2011]动态逆序对(带修主席树)

    3295: [Cqoi2011]动态逆序对 **Time Limit: 10 Sec Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j& ...

  7. [BZOJ3295][Cqoi2011]动态逆序对 CDQ分治&树套树

    3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j,且 ...

  8. bzoj千题计划146:bzoj3295: [Cqoi2011]动态逆序对

    http://www.lydsy.com/JudgeOnline/problem.php?id=3295 正着删除看做倒着添加 对答案有贡献的数对满足以下3个条件: 出现时间:i<=j 权值大小 ...

  9. BZOJ3295: [Cqoi2011]动态逆序对(树状数组套主席树)

    3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 7465  Solved: 2662[Submit][Sta ...

  10. 洛谷 P3157 [CQOI2011]动态逆序对 解题报告

    P3157 [CQOI2011]动态逆序对 题目描述 对于序列\(A\),它的逆序对数定义为满足\(i<j\),且\(A_i>A_j\)的数对\((i,j)\)的个数.给\(1\)到\(n ...

随机推荐

  1. Java开发学习(四十四)----MyBatisPlus查询语句之查询条件

    1.查询条件 前面我们只使用了lt()和gt(),除了这两个方法外,MybatisPlus还封装了很多条件对应的方法. MybatisPlus的查询条件有很多: 范围匹配(> . = .betw ...

  2. VulnHub靶机渗透实战9-vikings

    ​本次靶机是CTF风格的靶机. 靶场地址:Vikings: 1 ~ VulnHub 网络呢还是桥接模式. Description Back to the Top A CTF machine with ...

  3. 彻底理解Python中的闭包和装饰器(下)

    上篇讲了Python中的闭包,本篇要讲的装饰器就是闭包的一个重要应用. 如果你还不知道什么是闭包,猛戳这里阅读:彻底理解Python中的闭包和装饰器(上) 什么是装饰器 装饰器的作用是在不修改函数定义 ...

  4. Kubernetes监控手册-01体系概述

    Kubernetes 监控体系驳杂,涉及到的内容非常多,总是感觉摸不到头绪,网上虽然有很多资料,都略显凌乱,没有一个体系化的讲解,今天开始,我们准备撰写一系列文章,把 Kubernetes 监控说透, ...

  5. week_1

    Andrew Ng机器学习笔记---by OrangeStar Week 1 A computer program is said to learn from experience E with re ...

  6. 第三章 --------------------XAML的属性和事件

    1.XAML注释是什么样子的? 在之前的章节有提起过,但是这一节我还是想系统的学习XAML,XAML的注释如下 <!-- //这其中填写注释 --> Notice:在注释的部分编译器是不编 ...

  7. [python] 基于matplotlib实现树形图的绘制

    树形图Tree diagram (代码下载) 本文旨在描述如何使用Python实现基本的树形图.要实现这样的树形图,首先需要有一个数值矩阵.每一行代表一个实体(这里是一辆汽车).每列都是描述汽车的变量 ...

  8. [编程基础] C和C++内置宏说明

    文章目录 1 内置的宏定义 2 运行平台宏 3 编译器宏 4 调试类型宏 5 代码 C和C++内置宏在代码调试.跨系统平台代码中会经常使用,本文记录说明一下.内置宏不需要调用头文件,可直接使用.在使用 ...

  9. GC耗时高,原因竟是服务流量小?

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介 最近,我们系统配置了GC耗时的监控,但配置上之后,系统会偶尔出现GC耗时大于1s的报警,排查花了一些力气,故在这里 ...

  10. H5直播技术起航

    作者:京东科技 吴磊 音视频基本概念 视频格式就是通常所说的.mp4,.flv,.ogv,.webm等.简单来说,它其实就是一个盒子,用来将实际的视频流以一定的顺序放入,确保播放的有序和完整性. 视频 ...