我是靠谱客的博主 忧虑山水,最近开发中收集的这篇文章主要介绍【2017 ACM/ICPC 乌鲁木齐赛区网络赛环境测试赛 E】蒜头君的排序【链接】h在这里写链接【题意】【题解】【错的次数】【反思】【代码】,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

【链接】h在这里写链接


【题意】


在这里写题意

【题解】


莫队算法+树状数组。
区间增加1或减少1.
对逆序对的影响是固定的。
(用冒泡排序变成升序的交换次数,就是逆序对的个数)

【错的次数】


0

【反思】


在这了写反思

【代码】

#include <bits/stdc++.h>
using namespace std;

const int N = 3e4;

int n,m, a[N + 10], l, r;
long long ans[N + 10],now = 0;

struct BI {
    int a[N + 10];

    int lowbit(int x) {
        return x&(-x);
    }

    void add(int x,int y) {
        while (x <= N) {
            a[x] += y;
            x += lowbit(x);
        }
    }

    int sum(int x) {
        int now = 0;
        while (x > 0) {
            now += a[x];
            x -= lowbit(x);
        }
        return now;
    }

    int get_sum(int l, int r) {
        return sum(r) - sum(l - 1);
    }
}BIT;

struct abc {
    int l, r, id;
}Q[N+10];

bool cmp(abc a, abc b) {
    if (a.l / 100 == b.l / 100) {
        return a.r < b.r;
    }
    else
        return a.l < b.l;
}

int main() {
    //freopen("F:\rush.txt", "r", stdin);
    ios::sync_with_stdio(0);
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];
    cin >> m;
    for (int i = 1; i <= m; i++) {
        cin >> Q[i].l >> Q[i].r;
        Q[i].id = i;
    }
    sort(Q + 1, Q + 1 + m, cmp);
    l = 1, r = 1, BIT.add(a[1], 1), now = 0;
    for (int i = 1; i <= m; i++) {
        while (r < Q[i].r) {
            r++;
            now += BIT.get_sum(a[r] + 1, n);
            BIT.add(a[r], 1);
        }
        while (l > Q[i].l) {
            l--;
            now += BIT.get_sum(1, a[l] - 1);
            BIT.add(a[l], 1);
        }
        while (r > Q[i].r) {
            now -= BIT.get_sum(a[r] + 1, n);
            BIT.add(a[r], -1);
            r--;
        }
        while (l < Q[i].l) {
            now -= BIT.get_sum(1, a[l] - 1);
            BIT.add(a[l], -1);
            l++;
        }
        ans[Q[i].id] = now;
    }
    for (int i = 1; i <= m; i++) 
        cout << ans[i] << endl;
    return 0;
}


转载于:https://www.cnblogs.com/AWCXV/p/7626034.html

最后

以上就是忧虑山水为你收集整理的【2017 ACM/ICPC 乌鲁木齐赛区网络赛环境测试赛 E】蒜头君的排序【链接】h在这里写链接【题意】【题解】【错的次数】【反思】【代码】的全部内容,希望文章能够帮你解决【2017 ACM/ICPC 乌鲁木齐赛区网络赛环境测试赛 E】蒜头君的排序【链接】h在这里写链接【题意】【题解】【错的次数】【反思】【代码】所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部