【Codeforces】CF 911 D. Inversion Counting(逆序对+思维)
题目
传送门:QWQ
分析
思维要求比较高。
首先我们要把原图的逆序对q算出来。
这个树状数组或归并排序都ok(树状数组不用离散化好评)
那么翻转$[l,r]$中的数怎么做呢?
暴力过不了,我试过了。
设$ t=r-l+1 $即为区间长度
那么区间数对数量(看好是所有数对,不是逆序对)的数量就是$ k =\frac{n\times(n-1)}{2} $
方法是我们判断一下数量k的奇偶性,如果是奇数的,那么就把$ q $的奇偶性变一变。
然后判断q的奇偶性输出就行。
为什么这样是对的呢?
首先翻转区间只影响到了两个数都在这个区间里面的逆序对,不干涉其他的数对。 翻转区间后,逆序对变成了正序对,正序对变成了逆序对。
那么如果k是偶数,那么无论区间里面的逆序对的奇偶性如何,翻转后奇偶性都不变。比如k=8,区间里面的逆序对数量p=3,翻转后逆序对数量p=5,不改变奇偶性。p为偶数时也同理。
那么如果k是奇数呢?比如k=9, p=3,翻转后p=6,奇偶性改变了。而p为偶数时也同理。
综上,只要区间数对数量k为奇数,原序列的逆序对数量奇偶性就改变,否则则不改变。
代码
#include <bits/stdc++.h>
using namespace std;
const int maxn=;
int bit[maxn];
int a[maxn], n;
void add(int x,int c){ while(x<=n){ bit[x]+=c; x+=x&-x; } }
int query(int x){
int res=;
while(x){ res+=bit[x]; x-=x&-x; }
return res;
}
int getRE(int l,int r){
memset(bit,,sizeof(bit));
int ans=;
for(int i=l;i<=r;i++){
ans+=i-l-query(a[i]);
add(a[i],);
}
return ans;
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
int q=getRE(,n)%;
int m; scanf("%d",&m);
while(m--){
int l,r; scanf("%d%d",&l,&r);
int t=r-l+; t=t*(t-)/;
if(t%) q^=;
if(!q) puts("even"); else puts("odd");
}
}
【Codeforces】CF 911 D. Inversion Counting(逆序对+思维)的更多相关文章
- Codeforces 911D. Inversion Counting (数学、思维)
题目链接:Inversion Counting 题意: 定义数列{ai|i=1,2,...,n}的逆序对如下:对于所有的1≤j<i≤n,若ai<aj,则<i,j>为一个逆序对. ...
- UVA 11990 ``Dynamic'' Inversion 动态逆序对
``Dynamic'' Inversion Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://uva.onlinejudge.org/index ...
- NOIp2013 火柴排队【逆序对/思维】 By cellur925
题目大意:给你两列数\(ai\)和\(bi\),你可以交换每列数中相邻的两个数,求一个最小交换次数使\(\sum_{i=1}^{n}(a_i-b_i)^2\) 最小. 最后满足条件的两个序列一定是各个 ...
- Codeforces 911 三循环数覆盖问题 逆序对数结论题 栈操作模拟
A #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) #def ...
- HDU 1394Minimum Inversion Number 数状数组 逆序对数量和
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- HDU-1394 Minimum Inversion Number 线段树+逆序对
仍旧在练习线段树中..这道题一开始没有完全理解搞了一上午,感到了自己的shabi.. Minimum Inversion Number Time Limit: 2000/1000 MS (Java/O ...
- Codeforces Round #329 (Div. 2) B. Anton and Lines 逆序对
B. Anton and Lines Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/593/pr ...
- hdu 5497 Inversion 树状数组 逆序对,单点修改
Inversion Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5497 ...
- 浙江工商大学15年校赛I题 Inversion 【归并排序求逆序对】
Inversion Time Limit 1s Memory Limit 131072KB Judge Program Standard Ratio(Solve/Submit) 15.00%(3/20 ...
随机推荐
- linux rinetd、socat端口转发部署(很实用的网络工具)
端口转发映射的程序叫rinetd,下载地址,直接manke编译安装即可. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [root@PortForward02 src] ...
- HDU 4240
http://acm.hdu.edu.cn/showproblem.php?pid=4240 题意:求最大流和流量最大的一条路径的流量的比值 题解:流量最大的路径的流量在dinic的dfs每次搜到终点 ...
- asp.net mvc 快捷下拉列表
各种表单中可能经常会遇到使用各种下拉列表的地方, 有些数据是从数据库来的, 有些则是固定数值, 为了方便, 快速的构造一个可以保持状态的下拉列表, 就出现了下面的方法 2分钟构思的代码, 比较粗糙, ...
- tensorflow中的参数初始化方法
1. 初始化为常量 tf中使用tf.constant_initializer(value)类生成一个初始值为常量value的tensor对象. constant_initializer类的构造函数定义 ...
- opencv-python教程学习系列11-几何变换
前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍几何变换,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 系统: ...
- 通过Servlet设置文件下载
文件下载 1.获取要下载的文件的绝对路径 但是使用getServletContext().getRealPath()方法在不同的服务器上所获得的实现是不一样的 因为项目被打包入.war文件以后就失去了 ...
- HDU 2544:最短路
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- API设计风格(RRC、REST、GraphQL、服务端驱动)
API设计风格(RRC.REST.GraphQL.服务端驱动) Web API设计其实是一个挺重要的设计话题,许多公司都会有公司层面的Web API设计规范,几乎所有的项目在详细设计阶段都会进行API ...
- 【问题】C4D中设置了界面颜色,如何恢复默认?
由于C4D没有恢复默认设置的选项,恢复默认的时候比较麻烦,这里简单删除一下配置文件就好了. 1.打开C4D设置,点击下面的[打开配置文件夹],并关掉C4D. (即C:\Users\你的用户名\AppD ...
- 《DSP using MATLAB》Problem 4.10
今天擦完了玻璃,尽管有地方不那么明亮干净,冷风中瑟瑟发抖,年也快临近了. 代码是从网上找的, function [p, np, r, nr] = deconv_m(b, nb, a, na) % Mo ...