【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 ...
随机推荐
- react 学习日记
1.本地配置代理服务: create-react-app 创建的react项目 package.jsoin 中 加入: "proxy": "http://localh ...
- 《利用Python进行数据分析》笔记---第5章pandas入门
写在前面的话: 实例中的所有数据都是在GitHub上下载的,打包下载即可. 地址是:http://github.com/pydata/pydata-book 还有一定要说明的: 我使用的是Python ...
- SSH 获取GET/POST参数
在做项目的API通知接口的时候,发现在SSH框架中无法获取到对方服务器发来的异步通知信息.最后排查到的原因可能是struts2对HttpServletRequest进行了二次处理,那么该如何拿到pos ...
- magento导航栏中如何加入home主页
magento在导航栏中加入home主页是很简单的,几个步骤即可在magento导航栏中加入home主页! 下面简单介绍下如何在magento导航栏中加入home主页: 首先我们打开对应应用的模板文件 ...
- squeeze()
一.说明 B = squeeze(A),B与A有相同的元素,但所有只有一行或一列的维度(a singleton dimension)被去除掉了.A singleton dimension的特征是siz ...
- 使用pip install XX 命令时报错
在使用pip命令安装的时候,我遇到这样的报错: C:\Users\86962>pip install Appium-Python-Client Collecting Appium-Python- ...
- 《DSP using MATLAB》Problem 4.12
代码: function [As, Ac, r, v0] = invCCPP(b0, b1, a1, a2) % Determine the signal parameters Ac, As, r, ...
- ZOJ3545 Rescue the Rabbit
分析 未知定长串中不同已知模板串的出现次数问题,一般做法是AC自动机上dp. 考虑背包,\(dp(i,j,k)\)表示当前串长为\(i\),在AC自动机上对应节点\(j\),已匹配的模板串的状态为\( ...
- 【转】python基础-编码与解码
[转自:https://www.cnblogs.com/OldJack/p/6658779.html] 一.什么是编码 编码是指信息从一种形式或格式转换为另一种形式或格式的过程. 在计算机中,编码,简 ...
- asm数据文件迁移(asm–>asm)
rman迁移操作 [oracle@localhost oradata]$ rman target / Recovery Manager: Release 10.2.0.3.0 - Producti ...