제출 #1283102

#제출 시각아이디문제언어결과실행 시간메모리
1283102GoBananas69Diversity (CEOI21_diversity)C++20
38 / 100
14 ms1756 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N, Q; if (!(cin >> N >> Q)) return 0; vector<int> A(N); for (int i = 0; i < N; ++i) cin >> A[i]; while (Q--) { int L, R; cin >> L >> R; --L; --R; // frequency for values 1..1000 const int MAXV = 1000; vector<int> freq(MAXV + 1, 0); for (int i = L; i <= R; ++i) ++freq[A[i]]; // collect block sizes (non-zero frequencies) vector<int> blocks; for (int v = 1; v <= MAXV; ++v) if (freq[v] > 0) blocks.push_back(freq[v]); if (blocks.empty()) { cout << 0 << '\n'; continue; } sort(blocks.begin(), blocks.end(), greater<int>()); deque<int> dq; bool putLeft = true; for (int s : blocks) { if (putLeft) dq.push_front(s); else dq.push_back(s); putLeft = !putLeft; } int m = 0; for (int s : blocks) m += s; ll T = 1LL * m * (m + 1) / 2; ll ans = 0; int P = 0; for (int s : dq) { ll left_len = P; ll right_len = m - (P + s); ll left_sub = left_len * (left_len + 1) / 2; ll right_sub = right_len * (right_len + 1) / 2; ll intersect = T - left_sub - right_sub; // number of subarrays that include this value ans += intersect; P += s; } cout << ans << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...