Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define sc(a) scanf("%d", &a)
- #define sc2(a,b) scanf("%d %d", &a, &b)
- #define pri(x) printf("%d\n", x)
- #define prie(x) printf("%d ", x)
- #define sz(x) (int)((x).size())
- #define mp make_pair
- #define pb push_back
- #define f first
- #define s second
- #define sq(x) ((x)*(x))
- #define BUFF ios::sync_with_stdio(false)
- typedef long long int ll;
- typedef pair<int, int> ii;
- typedef vector<int> vi;
- typedef vector<vi> vvi;
- typedef vector<ii> vii;
- const int INF = 0x3f3f3f3f;
- const ll LINF = 0x3f3f3f3f3f3f3f3fll;
- #define MAX 1000010
- ll seg1[2*MAX];
- ll seg2[2*MAX];
- int n;
- void build() {
- for (int i = 0; i <= 2*n; i++) seg1[i] = 0;
- for (int i = 0; i <= 2*n; i++) seg2[i] = 0;
- }
- ll sum1(int a, int b) {
- ll ret = 0;
- for (a += n, b += n; a <= b; ++a/=2, --b/=2) {
- if (a%2 == 1) ret += seg1[a];
- if (b%2 == 0) ret += seg1[b];
- }
- return ret;
- }
- ll sum2(int a, int b) {
- ll ret = 0;
- for (a += n, b += n; a <= b; ++a/=2, --b/=2) {
- if (a%2 == 1) ret += seg2[a];
- if (b%2 == 0) ret += seg2[b];
- }
- return ret;
- }
- void update1(int p, int x) {
- seg1[p += n] += x;
- while (p /= 2) seg1[p] = seg1[2*p] + seg1[2*p+1];
- }
- void update2(int p, int x) {
- seg2[p += n] += x;
- while (p /= 2) seg2[p] = seg2[2*p] + seg2[2*p+1];
- }
- int main() {
- while (sc(n) != EOF) {
- int v[n];
- for (int i = 0; i < n; i++) sc(v[i]);
- build();
- ll out = 0;
- for (int i = 0; i < n; i++) {
- update1(v[i], 1);
- ll a;
- if (v[i] == n) a = 0;
- else a = sum1(v[i] + 1, n);
- update2(v[i], a);
- if (v[i] != n)
- out += sum2(v[i] + 1, n);
- }
- printf("%lld\n", out);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement