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

技术文章 3个月前 完美者
1,244 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

版权声明:完美者 发表于 2020-12-29 11:09:53。
转载请注明:NC20861 兔子的逆序对(数学基础) | 完美导航

暂无评论

暂无评论...