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······ -->不变 所以我们需要做的是判断交换的两个数是不是相等,如果是相等就不变化奇偶性,否则奇偶性变化一次。 上代码:
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相关推荐
- 强化学习 - 详细解读DQN(更新完成)
详细解读DQN 一. 强化学习 1. 什么是强化学习问题? 2. 强化学习的理论体系 (1) MDP i) Markov Property ii) Markov Process iii) Markov ...
- 1897个D3 例子
1.113th U.S. Congressional Districts 2.The Story of the Season 3.20000 points in random motion ...
- 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 ...
- 2020年 ICLR 国际会议最终接受论文(poster-paper)列表(二)
来源:AINLPer微信公众号(点击了解一下吧) 编辑: ShuYini 校稿: ShuYini 时间: 2020-02-21 2020年的ICLR会议将于今年的4月26日-4月30日在Mil ...
- 国外成熟的程序交易系统的思路 z
波涛(1998)在<系统交易方法>中提出,一个设计良好的交易系统,必须对投资决策的各个相关环节做出相应明确的规定,同时还必须符合使用者的心理特征.投资对象的统计特征以及投资资金的风险特征. ...
- 亚马逊是如何成为全球最佳雇主的?
西雅图IT圈:seattleit [今日作者]Dexter 读书巨慢理事会会长 首先声明--这个标题,不是在开玩笑.在LinkedIn2018年度的最佳雇主评选中,亚马逊力压FANG里的其他大厂,成功 ...
- 很燃基于掘金量化平台的《Python化易战新书介
原 很燃!基于掘金量化平台的<Python量化交易实战>新书简介 内容简介: 在目前不断变化.蓬勃发展的中国资本市场,量化投资作为新兴的投资方法,引来越来越多的关注,使用量化投资技术的证券 ...
- Vigenere维吉尼亚密码加解密
1 相关公式及算法 参考:https://slidesplayer.com/slide/17887679/ 源码:https://github.com/pp-tt/Vigenere 1.1 加密算法 ...
- 很燃于掘量平的Pyhn化易战新书简介
原 很燃!基于掘金量化平台的<Python量化交易实战>新书简介 内容简介: 在目前不断变化.蓬勃发展的中国资本市场,量化投资作为新兴的投资方法,引来越来越多的关注,使用量化投资技术的证券 ...
最新文章
- 后台原理_从浏览器如何进入路由器后台【详细介绍】
- Linux OOM 自动杀死进程(转)
- php multi_query()函数 实现批量执行sql语句
- 给你揭密一个爆款文案套路,各行各业,谁用谁火
- 数值优化-梯度下降法
- 计算机组成原理完整学习笔记(五):计算方法
- 9月份红帽认证考试又 PASS 19位同学
- 视频二维码在线生成器怎么用?
- vue3 setup写法(语法糖版本)
- python基础之字符串(七)
- 我终于把Boss直聘上热度最高的Java面试八股文总结,渗透面试核心知识点!
- 学习笔记-B/S - Exploits
- 关于uni-app的ui库、ui框架、ui组件
- ipad一代还能下软件吗_学习用于软件管理的下一代构建工具
- 用遗传算法,开启研究车间调度问题之门
- C++实现远程桌面集群软件
- 找回ZIP压缩包密码
- 日裂变爆粉1000+的方法
- 利用scrap实现发送邮件,一个小实例
- Java操作Word方法汇总,并详细介绍最简单的方法!!吊打POI以及那些POI的封装库
热门文章
- 【CSS 伪类】顺序
- 死磕java并发cas_死磕Java——CAS
- Ubuntu连接WiFi
- 更改tomcat的request编码方式
- android art虚拟机安装,Android中art虚拟机启动流程
- python查询mysql 乱码问题_python查询mysql中文乱码问题
- python中cgi到底是什么_什么是CGI?详细介绍Python CGI编程
- mysql重装远程服务未_CentOS 7系统安装与远程连接MySQL(5.7)
- php的array跟go的array,实现类似php的array_column方法
- java 汉字排序_java实现中文汉字的首字母排序