Submission #54321930


Source Code Expand

/**
 *    Author: Nachiket Kanore
 *    Created: Saturday 08 June 2024 05:12:13 PM IST
 **/
#include "bits/stdc++.h"
using namespace std;

#ifdef DEBUG
#include "debug.h"
#else
#define see(...) ;
#endif

#define int int64_t
#define sz(x) (int)(x.size())
#define ALL(x) (x).begin(), (x).end()
#define F0R(i, R) for (int i = (0); i < (R); ++i)
#define FOR(i, L, R) for (int i = (L); i <= (R); ++i)

struct BIT {
	int N;
	vector<int> bit;

	void init(int n) {
		N = n;
		bit.assign(n + 1, 0);
	}

	void update(int idx, int val) {
		while (idx <= N) {
			bit[idx] += val;
			idx += idx & -idx;
		}
	}

	void updateMax(int idx, int val) {
		while (idx <= N) {
			bit[idx] = max(bit[idx], val);
			idx += idx & -idx;
		}
	}

	int pref(int idx) {
		int ans = 0;
		while (idx > 0) {
			ans += bit[idx];
			idx -= idx & -idx;
		}
		return ans;
	}

	int rsum(int l, int r) {
		return pref(r) - pref(l - 1);
	}

	int prefMax(int idx) {
		int ans = -2e9;
		while (idx > 0) {
			ans = max(ans, bit[idx]);
			idx -= idx & -idx;
		}
		return ans;
	}
} counter, summer;

const int MAX_N = 4e5 + 5;
int N, A[MAX_N], B[MAX_N];

void compress() {
	vector<int> values;
	FOR(i, 1, N) values.push_back(A[i]);
	sort(ALL(values));
	FOR(i, 1, N) B[i] = lower_bound(ALL(values), A[i]) - values.begin() + 1;
}

int32_t main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N;
	FOR(i, 1, N) cin >> A[i];

	compress();

	counter.init(N + 4);
	summer.init(N + 4);

	int answer = 0;

	FOR(i, 1, N) {
		counter.update(B[i], 1);
		summer.update(B[i], A[i]);

		int cnt = counter.pref(B[i]);
		int sum = summer.pref(B[i]);

		answer += cnt * A[i] - sum;
	}

	cout << answer << '\n';

	return 0;
}

Submission Info

Submission Time
Task F - Double Sum
User Nachiket
Language C++ 20 (gcc 12.2)
Score 500
Code Size 1769 Byte
Status AC
Exec Time 123 ms
Memory 16096 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 2
AC × 11
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt
All 00_sample_00.txt, 00_sample_01.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 02_corner_00.txt, 02_corner_01.txt, 02_corner_02.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3532 KiB
00_sample_01.txt AC 1 ms 3476 KiB
01_random_00.txt AC 7 ms 4116 KiB
01_random_01.txt AC 123 ms 15964 KiB
01_random_02.txt AC 82 ms 11992 KiB
01_random_03.txt AC 123 ms 15932 KiB
01_random_04.txt AC 45 ms 8756 KiB
01_random_05.txt AC 122 ms 16096 KiB
02_corner_00.txt AC 43 ms 15976 KiB
02_corner_01.txt AC 1 ms 3460 KiB
02_corner_02.txt AC 46 ms 16012 KiB