题面

逆序对

有一个长度为

N

\tt N

N 的排列

a

a

a,进行

M

\tt M

M 次操作,操作有

4

\tt 4

4 种:

  • 1 l r :交换

    a

    l

    \tt a_l

    al​ 和

    a

    r

    \tt a_r

    ar​.

  • 2 l r :翻转区间

    [

    l

    ,

    r

    ]

    \tt [l,r]

    [l,r].

  • 3 l r k :将区间

    [

    l

    ,

    r

    ]

    \tt [l,r]

    [l,r] 中的数向左转

    k

    \tt k

    k 位.

  • 4 l r k :将区间

    [

    l

    ,

    r

    ]

    \tt [l,r]

    [l,r] 中的数向右转

    k

    \tt k

    k 位.

每次操作后,询问该排列是奇排列还是偶排列。

1

N

2

1

0

5

1

M

5

1

0

5

\tt 1\leq N\leq 2\cdot10^5,1\leq M\leq5\cdot10^5

1≤N≤2⋅105,1≤M≤5⋅105.

题解

一共三道题的比赛总是那么极端,第一题永远都是用来拉开时间差距以及淘汰过于弱小的选手的签到题。当然,情况并不绝对,有的人尽管这一道题没有做出来,但还是拿了

240

\tt240

240 的高分。

有这么一个显而易见的结论:交换排列中相邻的两个数,逆序对数一定变化

1

\tt1

1 。

那么所有的操作,都用交换相邻两个数的基本操作组成,就可以简化不少了。

对于第一种操作,逆序对数一定变化

1

\tt1

1 ,也就是奇偶性改变。动用行列式的知识我们也可以得到这个结论。可以这么想:

a

r

\tt a_r

ar​ 先移动到

a

l

+

1

\tt a_{l+1}

al+1​ 的位置,与

a

l

\tt a_l

al​ 交换,再移动回去。来回一趟交换次数是偶数,加上与

a

l

\tt a_l

al​ 交换那一次,一定是奇数。有选手在评论区说,

l

=

r

\tt l=r

l=r 时要特判……也有道理,毕竟题目条件给的是

l

r

\tt l\leq r

l≤r。

对于第二种操作,相当于把中心对称的点都进行一次操作一,不必过多赘述。

对于第三种操作和第四种操作,都是把一段的点移动到另一端,进行

k

\tt k

k 次。每移动一次,相邻交换的次数是

r

l

\tt r-l

r−l ,那么对逆序对数的改变量就

(

r

l

)

k

(
 ⁣ ⁣ ⁣ ⁣

m

o

d

  

2

)

\tt\equiv(r-l)*k~~(\!\!\!\!\mod2)

≡(r−l)∗k  (mod2) 。

CODE

为体现对数据的尊重,我把操作一

l

=

r

\tt l=r

l=r 的特判加上了。

#include<map>
#include<queue>
#include<cmath>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define MAXN 500005
#define ENDL putchar('\n')
#define LL long long
#define DB double
#define lowbit(x) ((-x) & (x))
LL read() {
LL f = 1,x = 0;char s = getchar();
while(s < '0' || s > '9') {if(s=='-')f = -f;s = getchar();}
while(s >= '0' && s <= '9') {x=x*10+(s-'0');s = getchar();}
return f * x;
}
const int MOD = 1000000007;
int n,m,i,j,s,o,k;
int a[MAXN];
int c[MAXN];
void addc(int x,int y) {while(x<=n)c[x]+=y,x+=lowbit(x);}
int Sum(int x) {int as=0;while(x>0)as+=c[x],x-=lowbit(x);return as;}
int main() {
n = read();m = read();
for(int i = 1;i <= n;i ++) {
a[i] = read();
}
int sum = 0;
for(int i = n;i > 0;i --) {
(sum += Sum(a[i]-1)) %= 2;
addc(a[i],1);
}
for(int i = 1;i <= m;i ++) {
k = read();
if(k == 1) {
s = read();o = read();
if(s != o) sum ^= 1;
}
else if(k == 2) {
s = read();o = read();
int le = (o-s+1)/2;
sum ^= (le&1);
}
else {
s = read();o = read();k = read();
int le = (k&1) * (o-s);
sum ^= (le&1);
}
printf("%d\n",sum&1);
}
return 0;
}

牛客IOI周赛26-提高组 A. 逆序对的更多相关文章

  1. 牛客IOI周赛17-提高组 卷积 生成函数 多项式求逆 数列通项公式

    LINK:卷积 思考的时候 非常的片面 导致这道题没有推出来. 虽然想到了设生成函数 G(x)表示最后的答案的普通型生成函数 不过忘了化简 GG. 容易推出 \(G(x)=\frac{F(x)}{1- ...

  2. 牛客OI周赛9-提高组题目记录

    牛客OI周赛9-提高组题目记录 昨天晚上做了这一套比赛,觉得题目质量挺高,而且有一些非常有趣而且非常清奇的脑回路在里边,于是记录在此. T1: 扫雷 题目链接 设 \(f_i\) 表示扫到第 \(i\ ...

  3. 牛客OI周赛8-提高组A-用水填坑

    牛客OI周赛8-提高组A-用水填坑 题目 链接: https://ac.nowcoder.com/acm/contest/403/A 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制: ...

  4. 牛客OI周赛2-提高组

    A.游戏 链接:https://www.nowcoder.com/acm/contest/210/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语 ...

  5. 牛客OI周赛11-普及组 B Game with numbers (数学,预处理真因子)

    链接:https://ac.nowcoder.com/acm/contest/942/B 来源:牛客网 Game with numbers 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C+ ...

  6. 牛客OI周赛7-提高组 A 小睿睿的等式

    链接:https://ac.nowcoder.com/acm/contest/371/A来源:牛客网 小睿睿在游戏开始时有n根火柴棒,他想知道能摆成形如“A+B=n”的等式且使用的火柴棒数也恰好等于n ...

  7. 牛客OI周赛7-提高组 B小睿睿的询问(ST打表)

    链接:https://ac.nowcoder.com/acm/contest/371/B来源:牛客网 小睿睿的n个妹纸排成一排,每个妹纸有一个颜值val[i].有m个询问,对于每一个询问,小睿睿想知道 ...

  8. 牛客OI周赛7-普及组 解题报告

    出题人好评. 评测机差评. A 救救喵咪 二位偏序.如果数据范围大的话直接树状数组,不过才1000就\(O(n^2)\)暴力就ok了. #include <bits/stdc++.h> s ...

  9. 牛客OI周赛10-普及组-A眼花缭乱的街市-(加速+二分)

    https://ac.nowcoder.com/acm/contest/901/A 很简单的一道题,全场只有20+AC,卡时间.新学了cin加速语法和数组二分查找的函数调用. 知道有个读写挂,可以加速 ...

随机推荐

  1. 大功率超远距离lora无线数传电台,多级中继功能

    一.在无线通信领域,LoRa是目前市场最被看好的技术之一.随着新一代LoRa调制技术的升级,市场对LoRa技术的认知.认可逐步提高,基于LoRa调制技术开发的产品得到更广泛的应用.受益于其超低的接收灵 ...

  2. 腾讯云数据库TDSQL-大咖论道 | 基础软件的过去、现在、未来

    近十年来,中国基础软件发展势头迅猛,市场前景看高,越来越多的企业也正在进行基础软件升级.那中国基础软件行业目前在国际市场上有什么优势,面临哪些困境,以及未来基础软件行业会如何发展呢?腾讯云数据库邀请沙 ...

  3. mysql中max_connections与max_user_connections使用区别

    问题描述:把max_connections和max_user_connections参数进行分析测试,顾名思义,max_connections就是负责数据库全局的连接数,max_user_connec ...

  4. Elasticsearch 在地理信息空间索引的探索和演进

    vivo 互联网服务器团队- Shuai Guangying 本文梳理了Elasticsearch对于数值索引实现方案的升级和优化思考,从2015年至今数值索引的方案经历了多个版本的迭代,实现思路从最 ...

  5. jenkins部署docker

    1. 先在jenkins上配置拉取代码部分,需要在git上找到项目位置,直接复制url即可 http://192.168.0.161:3000/IT-Insurance/Back.Test-Walle ...

  6. MySql查看索引以及各字段含义

    查看表的索引: show index from userInfo(表名) show index from 数据库名.表名 查看某表某一列上的索引使用下面的SQL语句: show index from ...

  7. MYSQL中IF IN语句

    以下代码摘自后台管理系统中的一部分SQL语句: 当取数状态为1或2时,才展示取数时间,否则,取数时间展示为空 当申报状态为2.3.4或5时,才展示申报时间,否则,申报时间展示为空 select A.Q ...

  8. NC20806 区区区间间间

    NC20806 区区区间间间 题目 题目描述 给出长度为n的序列a,其中第i个元素为 \(a_i\),定义区间(l,r)的价值为 \(v_{l,r} = max(a_i - a_j | l \leqs ...

  9. 云表平台VS永中office,谁更胜一筹?

    20年前,永中软件在国外办公软件独霸江山以及盗版软件肆意横行的夹缝中呱呱坠地. 经过永中人日日夜夜的不懈奋斗,永中Office V1.0面世. 永中科技 从创立之初永中软件便预见了独立创新.自主可控的 ...

  10. ElementUI嵌套页面及关联增删查改实现

    @ 目录 前言 一.ElementUI如何在原有页面添加另外一个页面并实现关联增删查改? 二.实现步骤 1.ElementUI代码 2.思路:很简单 1.1 首先通过el-row.el-col.el- ...