码迷,mamicode.com
首页 > 其他好文 > 详细

NC20861 兔子的逆序对(数学基础)

时间:2020-12-29 11:09:53      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:--   证明   ref   兔子   逆序数   数字   print   else   变化   

题目链接

解题思路

??由于题目中的数都是互不相同的,所以每交换一对数字,序列的逆序数的奇偶性就会改变一次(可以证明序列的奇偶性变化只与交换的这对数的大小关系有关)。

代码

int arr[maxn], tmp[maxn], n, m; ll cnt;
void merge(int l, int r) {
    if (l>=r) return;
    int mid = (l+r)>>1;
    merge(l, mid);
    merge(mid+1, r);
    int l1 = l, l2 = mid+1, tot = l;
    while(l1<=mid || l2<=r) {
        if (l2>r || (l1<=mid && arr[l1]<=arr[l2])) tmp[tot++] = arr[l1++];
        else {
            cnt += mid-l1+1;
            tmp[tot++] = arr[l2++];
        }
    }
    for (int i = l; i<=r; ++i) arr[i] = tmp[i];
}
int main() {
    cin >> n;
    for (int i = 1; i<=n; ++i) scanf("%d", &arr[i]);
    merge(1, n);
    int m; cin >> m;
    cnt = cnt&1;
    while(m--) {
        int l, r; scanf("%d%d", &l, &r);
        if (((r-l+1)/2)&1) cnt ^= 1;
        printf("%s\n", cnt&1 ? "dislike":"like");
    }
    return 0;
}

NC20861 兔子的逆序对(数学基础)

标签:--   证明   ref   兔子   逆序数   数字   print   else   变化   

原文地址:https://www.cnblogs.com/shuitiangong/p/14176676.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!