题目传送门(内部题120)


输入格式

  第一行,两个正整数$n,m$。
  第二行,$n$个正整数$a_1,a_2,...,a_n$,保证$1\leqslant a_i\leqslant n$,可能存在相同值。
  第三行,$m$个正整数$j_1,j_2,...,j_m$,保证$1\leqslant j_k\leqslant n$。


输出格式

  第一行,第一个整数表示操作前的逆序对数量,接下来$m$个整数表示每次操作后的逆序对数量。


样例

样例输入:

6 2
1 3 4 2 6 1
2 3

样例输出:

6 3 1


数据范围与提示

样例解释:

  第一次操作:由$1\ 3\ 4\ 2\ 6\ 1$变为$1\ 1\ 4\ 2\ 6\ 3$。
  第二次操作:由$1\ 1\ 4\ 2\ 6\ 3$变为$1\ 1\ 2\ 3\ 6\ 4$。
  加粗标记的是这次操作影响到的数。

数据范围:

  对于$40\%$的数据,$1\leqslant n,m\leqslant 200$。
  对于$60\%$的数据,$1\leqslant n,m\leqslant 2,000$。
  对于$80\%$的数据,$1\leqslant n,m\leqslant 20,000$。
  对于$100\%$的数据,$1\leqslant n,m\leqslant 200,000,1\leqslant a_i\leqslant n,1\leqslant j_k\leqslant n$。


题解

$\Theta(n\log n)$求逆序对在此不再赘述。

打开大样例,发现很多都是一样的,于是考虑乱搞……

发现,如果在前面某一次操作时动了某个位置,如果现在还动这个位置则对逆序对个数是没有影响的(相当与没动),直接输出上一次的结果即可。

时间复杂度:$\Theta(n^2\log n)$。

期望得分:$60$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[200001],top;
int e[200001],b[200001];
int tr[200010];
bool vis[200001];
long long ans;
int lowbit(int x){return x&-x;}
void add(int x){for(int i=x;i;i-=lowbit(i))tr[i]++;}
int ask(int x){int res=0;for(int i=x;i<=n+1;i+=lowbit(i))res+=tr[i];return res;}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int i=1;i<=n;i++){ans+=ask(a[i]+1);add(a[i]);}
printf("%lld ",ans);
while(m--)
{
int k;
scanf("%d",&k);
if(vis[k]){printf("%lld ",ans);continue;}
if(!ans){puts("0");continue;}
ans=top=0;
for(int i=1;i<=n;i++)tr[i]=0;
for(int i=k;i<=n;i++)
if(a[i]<=a[k])
{
vis[i]=1;
e[++top]=a[i];
b[top]=i;
}
sort(e+1,e+top+1);
for(int i=1;i<=top;i++)a[b[i]]=e[i];
for(int i=1;i<=n;i++){ans+=ask(a[i]+1);add(a[i]);}
printf("%lld ",ans);
}
return 0;
}

rp++

[CSP-S模拟测试]:统计(树状数组+乱搞)的更多相关文章

  1. BZOJ 1012: [JSOI2008]最大数maxnumber 单调队列/线段树/树状数组/乱搞

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 4750  Solved: 2145[Submi ...

  2. NOIP模拟 Work - 二分 + 树状数组 / ???

    题目分析 如果没有最后的注意事项,此题就是二分裸题.有了注意事项,会有两种思路: 在线:二分天数t,并在主席树上求1~t天中大于d(浪费的时间)的时间之和以及数量,答案即为:sum - d * cnt ...

  3. GZOI 2017配对统计 树状数组

    题目 https://www.luogu.com.cn/problem/P5677 分析 最开始读题的时候没有读的太懂,以为i是在选定区间内给的,实际上不是,这道题的意思应该是在l和r的区间内找出有多 ...

  4. 2018.10.08 NOIP模拟 栅栏(树状数组+rand)

    传送门 今天的送分题. 首先考虑每次给要围上栅栏的矩阵里的整体加上1,如果栅栏被撤销就整体减1,最后比较两个点的值是否相同来进行判断. 然而这样的效果并不理想,很容易卡掉. 进一步思考,我们第iii次 ...

  5. [CSP-S模拟测试]:军训队列(DP+乱搞)

    题目描述 有$n$名学生参加军训,军训的一大重要内容就是走队列,而一个队列的不规整程度是该队中最高的学生的身高与最矮的学生的身高差值的平方.现在要将$n$名参加军训的学生重新分成$k$个队列,每个队列 ...

  6. HDU 2689 Sort it【树状数组】

    Sort it Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  7. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2545  Solved: 1419[Submit][Sta ...

  8. 【BZOJ2141】排队 树状数组+分块

    [BZOJ2141]排队 Description 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家乐和和.红星幼儿园的小朋友们排起了长长地队伍,准备 ...

  9. gym 100589A queries on the Tree 树状数组 + 分块

    题目传送门 题目大意: 给定一颗根节点为1的树,有两种操作,第一种操作是将与根节点距离为L的节点权值全部加上val,第二个操作是查询以x为根节点的子树的权重. 思路: 思考后发现,以dfs序建立树状数 ...

随机推荐

  1. 可能是把 Java 内存区域讲的最清楚的一篇文章

    出处:  可能是把 Java 内存区域讲的最清楚的一篇文章 Java 内存区域详解 写在前面 (常见面试题) 基本问题 拓展问题 一 概述 二 运行时数据区域 2.1 程序计数器 2.2 Java 虚 ...

  2. MySQL性能优化(五):分表

    原文:MySQL性能优化(五):分表 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbi ...

  3. Css常用的技巧

    一.使用css缩写 使用缩写可以帮助减少你CSS文件的大小,更加容易阅读.  具体内容请浏览:CSS常用缩写语法 二.明确定义单位,除非值为0. 忘记定义尺寸的单位是CSS新手普遍的错误.在HTML中 ...

  4. 基于CentOS系统部署EPICS环境

    1.虚拟机安装CentOS系统2.打开终端,以root账户登录3.进入/usr/local目录下,新建文件夹epics,并进入该文件夹4.在/usr/local/epics目录下,执行wget htt ...

  5. luogu题解 UVA11536 【Smallest Sub-Array】最短set区间&滑动窗口

    题目链接: https://www.luogu.org/problemnew/show/UVA11536 题目大意: 给定一个\(N,M,K\),构造这样的数列: \(x[1]=1,x[2]=2,x[ ...

  6. 埋在 MYSQL 数据库应用中的17个关键问题!

    Mysql的使用非常普遍,跟mysql有关的话题也非常多,如性能优化.高可用性.强一致性.安全.备份.集群.横向扩展.纵向扩展.负载均衡.读写分离等.要想掌握其中的精髓,可得花费不少功力,虽然目前流行 ...

  7. 标准模板库(STL)

    组件: 容器:管理某类对象的集合. 迭代器:用来在一个对象集合内遍历元素. 算法:处理集合内的元素. 容器 序列式容器:顾名思义.array,vector,deque,list 和 forward_l ...

  8. 测试数年来,我只提了几十个bug

    ---恢复内容开始--- 测试做了十来年,大大小小的项目产品已经记不清了,开发们在一如既往地改着改了无数遍的bug,测试也一如既往的提着提了无数遍的bug,那么今天笔者对以往的bug类型做一个简单的总 ...

  9. 检测字符串是否为UTF8编码

    /** * 检测字符串是否为UTF8编码 * @param string $str 被检测的字符串 * @return boolean */ function is_utf8($str){ $len ...

  10. 1.Go-copy函数、sort排序、双向链表、list操作和双向循环链表

    1.1.copy函数 通过copy函数可以把一个切片内容复制到另一个切片中 (1)把长切片拷贝到短切片中 ? 1 2 3 4 5 6 7 8 9 10 11 12 package main   imp ...