ACDream - Dynamic Inversions II
先上题目:
A - Dynamic Inversions II
Problem Description
逆序对的意思是1 <= i < j <= N 且a[i] > a[j].
Input
多组数据,每组数据:
两个数N,M,接下来一行有N个数a[1]... a[N]
最后M行每行两个数x,y
1 <= N,M <= 10^5, 1 <= x < y <= N,1 <= a[i] <= N
Output
Sample Input
2 1
1 2
1 2
Sample Output
0
1 因为结果要求的是逆序对的二进制最低位是多少,所以我们需要分析一下变换了位置以后的就变化情况。
先求一次逆序对。
再分析情况,发现逆序对的奇偶性变化只有两个数之间的数会带来变化。
① ······大····小······ --> ······小····大······
中间的数有三种情况:a.比大的大 b.比大的小,比小的大 c.比小的小
对于三种情况逆序对的变化情况:
| 小 | 大 | ||||
| 大 | 减少 | 减少 | 增加 | ||
| 小 | 增加 | 减少 | 减少 |
其中减少和增加的量是相等的,那就是说这样变化的结果是偶数对-1对。
② ······小····大······ --> ······大····小······
中间的数有三种情况:a.比大的大 b.比大的小,比小的大 c.比小的小
对于三种情况逆序对的变化情况:
| 小 | 大 | ||||
| 大 | 增加 | 增加 | 减少 | ||
| 小 | 减少 | 增加 | 增加 |
其中减少和增加的量是相等的,那就是说这样变化的结果是偶数对+1对。 ③ ······a····a······ -->不变 所以我们需要做的是判断交换的两个数是不是相等,如果是相等就不变化奇偶性,否则奇偶性变化一次。 上代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define lowbit(x) (x & (-x))
#define MAX 100002
#define LL long long
using namespace std; int n,m; int c[MAX],a[MAX]; void add(int x){
for(;x<=n;x+=lowbit(x)) c[x]++;
} LL sum(int x){
LL ans=;
for(;x>;x-=lowbit(x)) ans+=c[x];
return ans;
} int main()
{
int x,y;
LL s;
while(scanf("%d %d",&n,&m)!=EOF){
memset(c,,sizeof(c));
s=;
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
add(a[i]);
s+=sum(n)-sum(a[i]);
}
bool f=s&;
if(f) puts("");
else puts("");
for(int i=;i<m;i++){
scanf("%d %d",&x,&y);
if(x!=y && a[x]!=a[y]) f=f^;
swap(a[x],a[y]);
if(f) puts("");
else puts("");
}
}
return ;
}
Dynamic InversionsII
ACDream - Dynamic Inversions II的更多相关文章
- Dynamic Inversions II 逆序数的性质 树状数组求逆序数
Dynamic Inversions II Time Limit: 6000/3000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Other ...
- Dynamic Inversions 50个树状数组
Dynamic Inversions Time Limit: 30000/15000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others ...
- [Express] Level 3: Massaging User Data
Flexible Routes Our current route only works when the city name argument matches exactly the propert ...
- Kooboo中怎么新增一个关联的Details 动态页面。
Kooboo中怎么新增一个关联的Details 动态页面. 有几个要点: 1. Sub Page的Parent Page 必须是英文书写.如果是中文会出现找不到页面 500错误 2. 要在Page M ...
- 国外成熟的程序交易系统的思路 z
波涛(1998)在<系统交易方法>中提出,一个设计良好的交易系统,必须对投资决策的各个相关环节做出相应明确的规定,同时还必须符合使用者的心理特征.投资对象的统计特征以及投资资金的风险特征. ...
- Reading task(Introduction to Algorithms. 2nd)
Introduction to Algorithms 2nd ed. Cambridge, MA: MIT Press, 2001. ISBN: 9780262032933. Introduction ...
- oracle已知会导致错误结果的bug列表(Bug Issues Known to cause Wrong Results)
LAST UPDATE: 1 Dec 15, 2016 APPLIES TO: 1 2 3 4 Oracle Database - Enterprise Edition - Versi ...
- LEETCODE —— Unique Paths II [动态规划 Dynamic Programming]
唯一路径问题II Unique Paths II Follow up for "Unique Paths": Now consider if some obstacles are ...
- LEETCODE —— Unique Paths II [Dynamic Programming]
唯一路径问题II Unique Paths II Follow up for "Unique Paths": Now consider if some obstacles are ...
随机推荐
- SQL 优化记录
1. 对Where 语句的法则 1.1 避免在WHERE子句中使用in,not in,or 或者having. 可以使用 exist 和not exist代替 in和not in. 可以使用表链接代 ...
- hdfs du命令是算的一份数据
As you can see, hadoop fsck and hadoop fs -dus report the effective HDFS storage space used, i.e. th ...
- Codeforces--630B--Moore's Law(快速幂)
Moore's Law Time Limit: 500MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64u Submit ...
- hdoj--5612--Baby Ming and Matrix games(dfs)
Baby Ming and Matrix games Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K ...
- B1303 [CQOI2009] 中位数图 数学
想明白算法之后特别水,因为b只有可能出现一次,所以直接在b的左右找就行了,比他大的为1,比他小的为-1,然后维护前缀和就行了. 假如b有可能出现多次呢?按照这种方法好像也很好办,就是枚举每个点就行了, ...
- c++ valarray 实现矩阵与向量相乘
#include <iostream>#include <valarray> template<class T> class Slice_iter { std::v ...
- Arranging Your Team
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=35800#problem/D #include <iostream> #inc ...
- bzoj1030 文本生成器(AC自动机+dp)
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4777 Solved: 1986[Submit][Stat ...
- oracle 创建命令
环境变量设置(在Sqlplus中执行) create or replace directory filepath as 'D:\ORACLEBACKUP'; 备份脚本:expdp system/123 ...
- 点开,看一段,你就会喜欢上学习pandas,你该这么学!No.3
身为一个啰嗦的博主,还是要说点啥,如果你不想学,直接拖拽到最后,发现彩蛋,然后3秒 我呢,有个小目标,就是把技术类的文章,写的有趣 编程呢,最难的是什么? 我投票给入门 其实,把一个人带进编程的大门是 ...