先上题目:

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······    -->不变

  所以我们需要做的是判断交换的两个数是不是相等,如果是相等就不变化奇偶性,否则奇偶性变化一次。

上代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <algorithm>
 5 #define lowbit(x) (x & (-x))
 6 #define MAX 100002
 7 #define LL long long
 8 using namespace std;
 9
10 int n,m;
11
12 int c[MAX],a[MAX];
13
14 void add(int x){
15     for(;x<=n;x+=lowbit(x)) c[x]++;
16 }
17
18 LL sum(int x){
19     LL ans=0;
20     for(;x>0;x-=lowbit(x)) ans+=c[x];
21     return ans;
22 }
23
24 int main()
25 {
26     int x,y;
27     LL s;
28     while(scanf("%d %d",&n,&m)!=EOF){
29         memset(c,0,sizeof(c));
30         s=0;
31         for(int i=1;i<=n;i++){
32             scanf("%d",&a[i]);
33             add(a[i]);
34             s+=sum(n)-sum(a[i]);
35         }
36         bool f=s&1;
37         if(f) puts("1");
38         else puts("0");
39         for(int i=0;i<m;i++){
40             scanf("%d %d",&x,&y);
41             if(x!=y && a[x]!=a[y]) f=f^1;
42             swap(a[x],a[y]);
43             if(f) puts("1");
44             else puts("0");
45         }
46     }
47     return 0;
48 }

Dynamic InversionsII


转载于:https://www.cnblogs.com/sineatos/p/3867592.html

ACDream - Dynamic Inversions II相关推荐

  1. 强化学习 - 详细解读DQN(更新完成)

    详细解读DQN 一. 强化学习 1. 什么是强化学习问题? 2. 强化学习的理论体系 (1) MDP i) Markov Property ii) Markov Process iii) Markov ...

  2. 1897个D3 例子

         1.113th U.S. Congressional Districts 2.The Story of the Season  3.20000 points in random motion ...

  3. Day03-《Guide to Maritime Informatics》-Part I Maritime Data 1-1.2

    1.2船舶自动识别系统 The Automatic Identification System The Automatic Identification System (AIS) was origin ...

  4. 2020年 ICLR 国际会议最终接受论文(poster-paper)列表(二)

    来源:AINLPer微信公众号(点击了解一下吧) 编辑: ShuYini 校稿: ShuYini 时间: 2020-02-21     2020年的ICLR会议将于今年的4月26日-4月30日在Mil ...

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

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

  6. 亚马逊是如何成为全球最佳雇主的?

    西雅图IT圈:seattleit [今日作者]Dexter 读书巨慢理事会会长 首先声明--这个标题,不是在开玩笑.在LinkedIn2018年度的最佳雇主评选中,亚马逊力压FANG里的其他大厂,成功 ...

  7. 很燃基于掘金量化平台的《Python化易战新书介

    原 很燃!基于掘金量化平台的<Python量化交易实战>新书简介 内容简介: 在目前不断变化.蓬勃发展的中国资本市场,量化投资作为新兴的投资方法,引来越来越多的关注,使用量化投资技术的证券 ...

  8. Vigenere维吉尼亚密码加解密

    1 相关公式及算法 参考:https://slidesplayer.com/slide/17887679/ 源码:https://github.com/pp-tt/Vigenere 1.1 加密算法 ...

  9. 很燃于掘量平的Pyhn化易战新书简介

    原 很燃!基于掘金量化平台的<Python量化交易实战>新书简介 内容简介: 在目前不断变化.蓬勃发展的中国资本市场,量化投资作为新兴的投资方法,引来越来越多的关注,使用量化投资技术的证券 ...

最新文章

  1. 后台原理_从浏览器如何进入路由器后台【详细介绍】
  2. Linux OOM 自动杀死进程(转)
  3. php multi_query()函数 实现批量执行sql语句
  4. 给你揭密一个爆款文案套路,各行各业,谁用谁火
  5. 数值优化-梯度下降法
  6. 计算机组成原理完整学习笔记(五):计算方法
  7. 9月份红帽认证考试又 PASS 19位同学
  8. 视频二维码在线生成器怎么用?
  9. vue3 setup写法(语法糖版本)
  10. python基础之字符串(七)
  11. 我终于把Boss直聘上热度最高的Java面试八股文总结,渗透面试核心知识点!
  12. 学习笔记-B/S - Exploits
  13. 关于uni-app的ui库、ui框架、ui组件
  14. ipad一代还能下软件吗_学习用于软件管理的下一代构建工具
  15. 用遗传算法,开启研究车间调度问题之门
  16. C++实现远程桌面集群软件
  17. 找回ZIP压缩包密码
  18. 日裂变爆粉1000+的方法
  19. 利用scrap实现发送邮件,一个小实例
  20. Java操作Word方法汇总,并详细介绍最简单的方法!!吊打POI以及那些POI的封装库

热门文章

  1. 【CSS 伪类】顺序
  2. 死磕java并发cas_死磕Java——CAS
  3. Ubuntu连接WiFi
  4. 更改tomcat的request编码方式
  5. android art虚拟机安装,Android中art虚拟机启动流程
  6. python查询mysql 乱码问题_python查询mysql中文乱码问题
  7. python中cgi到底是什么_什么是CGI?详细介绍Python CGI编程
  8. mysql重装远程服务未_CentOS 7系统安装与远程连接MySQL(5.7)
  9. php的array跟go的array,实现类似php的array_column方法
  10. java 汉字排序_java实现中文汉字的首字母排序