先上题目:

A - Dynamic Inversions II

Time Limit: 6000/3000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)
SubmitStatus

Problem Description

给出N个数a[1],a[2] ... a[N],a[1]...a[N]是1-N的一个排列,即1 <= a[i] <= N且每个数都不相同。有M个操作,每个操作给出x,y两个数,你将a[x],a[y]交换,然后求交换后数组的逆序对个数 % 2。
逆序对的意思是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

对于每组数据,输出M + 1行,第一行是开始时的逆序对数目 % 2,接下去M行每行一个数,表示这次修改后的逆序对数目 % 2

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的更多相关文章

  1. Dynamic Inversions II 逆序数的性质 树状数组求逆序数

    Dynamic Inversions II Time Limit: 6000/3000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Other ...

  2. Dynamic Inversions 50个树状数组

    Dynamic Inversions Time Limit: 30000/15000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others ...

  3. [Express] Level 3: Massaging User Data

    Flexible Routes Our current route only works when the city name argument matches exactly the propert ...

  4. Kooboo中怎么新增一个关联的Details 动态页面。

    Kooboo中怎么新增一个关联的Details 动态页面. 有几个要点: 1. Sub Page的Parent Page 必须是英文书写.如果是中文会出现找不到页面 500错误 2. 要在Page M ...

  5. 国外成熟的程序交易系统的思路 z

    波涛(1998)在<系统交易方法>中提出,一个设计良好的交易系统,必须对投资决策的各个相关环节做出相应明确的规定,同时还必须符合使用者的心理特征.投资对象的统计特征以及投资资金的风险特征. ...

  6. Reading task(Introduction to Algorithms. 2nd)

    Introduction to Algorithms 2nd ed. Cambridge, MA: MIT Press, 2001. ISBN: 9780262032933. Introduction ...

  7. 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 ...

  8. LEETCODE —— Unique Paths II [动态规划 Dynamic Programming]

    唯一路径问题II Unique Paths II Follow up for "Unique Paths": Now consider if some obstacles are ...

  9. LEETCODE —— Unique Paths II [Dynamic Programming]

    唯一路径问题II Unique Paths II Follow up for "Unique Paths": Now consider if some obstacles are ...

随机推荐

  1. 阿里云 Docker-registry 搭建

    阿里云 仓库地址: https://cr.console.aliyun.com/cn-hangzhou/instances/images

  2. oc50--@class1

    // // main.m #import <Foundation/Foundation.h> #import "Person.h" int main(int argc, ...

  3. oc26--Property,省略setget的声明

    // // Person.h #import <Foundation/Foundation.h> @interface Person : NSObject { int _age; } /* ...

  4. spring:按照Bean的名称自动装配User

    本实例将介绍如何按照Bean 的名称自动装配 User 对象! <bean> 元素的 autowire 属性负责自动装配 <bean> 标签,定义 JavaBean 的属性.这 ...

  5. B1588 [HNOI2002]营业额统计 set||平衡树

    平衡树题,求每个点的前驱,照例可以用set水过...(平衡树还是不会写) 又新学了一个用法: set <int> ::iterator s1; 这样s1就可以直接附为set中的地址了.但是 ...

  6. HDU3533 Escape

    题目: The students of the HEU are maneuvering for their military training. The red army and the blue a ...

  7. 错误:android.view.InflateException: Binary XML file line #167: Binary XML file line #167: Error inflating class <unknown>

    1:错误日志 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.8.activity.RecordActiv ...

  8. OPPO R9sPlus MIFlash线刷TWRP Recovery ROOT详细教程

    教程转载来自 残芯此生不换  OPPO R9sPlus 目前最简单的刷Recovery root 方法,强烈推荐 新机想要刷第三方卡刷包的最简单过程是:           手机关机-->下载M ...

  9. Excel常用的小技巧

    1.Excel如何实现单元格内轻松换行:按住ALT+enter就可以了. 2.Excel固定表头:在“视图”>冻结窗口>冻结首行. 3.防止电脑突然断电,导致正在编辑的Excel数据丢失, ...

  10. 阶乘问题-----sum随变量改变而改变