出题人题解 | #tokitsukaze and Inverse Number#

tokitsukaze and Inverse Number

https://ac.nowcoder.com/acm/problem/21191

原题解链接:https://ac.nowcoder.com/discuss/150249

先树状数组求逆序数,然后有个结论。

结论: 11nn的排列,任意交换两个数,逆序数奇偶性发生改变。

ansans=(操作前的序列的逆序数+需要交换多少次才能变成操作后的序列(不需要求最小操作次数))%22

alt

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+100;
struct BIT{
    int val[maxn];
    int lowbit(int x){
        return x & -x;
    }
    void add(int x){
        while (x<maxn){
            val[x] ++;
            x += lowbit(x);
        }
    }
    int query(int x){
        int ans =0;
        while (x){
            ans += val[x];
            x -= lowbit(x);
        }
        return ans;
    }
}tree;
int a[maxn];
int main(){
    int n;
    scanf("%d",&n);
    int sum = 0;
    for (int i=0;i<n;i++){
        scanf("%d",a+i);
    }
    for (int i=n-1;i>=0;i--){
        sum += tree.query(a[i]);
        sum %=2;
        tree.add(a[i]);
    }
    int m;
    scanf("%d",&m);
    while (m--){
        int l,r,k,len;
        scanf("%d%d%d",&l,&r,&k);
        len = r-l+1;
        int A = k % len;
        int B = len - A;
        //cerr<<A<<" "<<B<<endl;
        int delta = A%2 * B%2;
        delta %=2;
        if (delta){
            sum ^=1;
        }
        printf("%d\n",sum);
    }
    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 12:23
转人工😡
门口唉提是地铁杀:五次握手了
点赞 评论 收藏
分享
怎么起名字:早知道就不读书了,害得我送外卖还得扶眼镜
点赞 评论 收藏
分享
06-12 17:46
门头沟学院 Java
运营你豪哥:来说重点: ​1.项目前置,时间倒序。​​ 2.​项目描述强化结果与量化效果(STAR原则里的R)。​​ ​3.个人技能精炼,明确掌握程度,突出核心。​​ ​4.增加强有力开头的个人总结部分。​​ 5.​优化教育背景(成绩排名)、合并奖项与活动。​​
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务