zoukankan      html  css  js  c++  java
  • CH4201楼兰图腾

    不知道再哪里炸了longlong,懒得想了,全开就好了

    #include <bits/stdc++.h>
    using namespace std;
    long long a[200100], c[200100], c1[200100], c2[200100], n;
    long long ans1 = 0, ans2 = 0;
    long long getsum(long long p) {
        long long ans = 0;
        for (; p; p -= p & -p) {
            ans += c[p];
        }
        return ans;
    }
    void insert1(long long id, long long p) {
        for (; id <= n + 1; id += id & -id) c1[id] += p;
    }
    void insert2(long long id, long long p) {
        for (; id <= n + 1; id += id & -id) c2[id] += p;
    }
    void insert(long long p) {
        for (long long i = p; i <= n + 1; i += i & -i) c[i] += 1;
    }
    long long getsum1(long long p) {
        long long ans = 0;
        for (; p; p -= p & -p) ans += c1[p];
        return ans;
    }
    long long getsum2(long long p) {
        long long ans = 0;
        for (; p; p -= p & -p) ans += c2[p];
        return ans;
    }
    int main() {
        // freopen("xf.in","r",stdin);
        // freopen("xf.out","w",stdout);
        scanf("%d", &n);
        for (long long i = 1; i <= n; i++) {
            scanf("%lld", &a[i]);
            ans1 += getsum1(a[i] - 1);
            ans2 += getsum2(n + 1) - getsum2(a[i]);
            insert(a[i]);
            insert1(a[i], getsum(n + 1) - getsum(a[i]));
            insert2(a[i], getsum(a[i] - 1));
        }
        printf("%lld %lld
    ", ans1, ans2);
        return 0;
    }
  • 相关阅读:
    今年的第几天?
    特殊乘法
    abc
    求最大最小数
    二叉树遍历
    球的半径和体积
    成绩排序
    OC学习篇之---类的定义
    OC学习篇之---第一个程序HelloWorld
    OC学习篇之---类的初始化方法和点语法的使用
  • 原文地址:https://www.cnblogs.com/mybing/p/13608365.html
Copyright © 2011-2022 走看看