Submission #730612

#TimeUsernameProblemLanguageResultExecution timeMemory
730612vjudge1Izbori (COCI22_izbori)C++17
110 / 110
2268 ms17996 KiB
#include <iostream> #include <map> #include <vector> using namespace std; map<long long int, int> m; long long int a[200005], c[200005]; vector<int> g[200005]; struct FENWICK { vector<long long int> v; FENWICK (int n) { v.resize(n + 1); for (int i = 0; i <= n; i++) { v[i] = 0; } } long long int build(long long int x) { long long int res = 0; x++; while (x) { res += v[x]; x -= (x & (-x)); } return res; } void update(long long int x, long long int y) { x++; while (x < v.size()) { v[x] += y; x += (x & (-x)); } } long long int sum(long long int l, long long int r) { if (l == 0) return build(r); return build(r) - build(l - 1); } }; int main() { long long int n, d = 0, res = 0; cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; if (!m.count(a[i])) { m[a[i]] = m.size(); } a[i] = m[a[i]]; g[a[i]].push_back(i); } for (long long int x = 0; x <= n; x++) { if (g[x].empty()) continue; if (g[x].size() >= 450) { c[0] = 0; for (int i = 1; i <= n; i++) { c[i] = c[i - 1]; if (a[i - 1] == x) c[i]++; } FENWICK f(n + c[n] * 2 + 1); for (int j = 0; j < n; j++) { f.update(c[j] * 2 + n - j + 2, 1); res += f.sum(0, c[j + 1] * 2 + n - j); } } else { vector<int> v = g[x]; for (int i = 0; i < v.size(); i++) { for (int j = i; j < v.size(); j++) { long long int l, r; if (i == 0) l = v[i]; else l = v[i] - v[i - 1] - 1; if (j == v.size() - 1) r = n - v[j]; else r = v[j + 1] - v[j]; long long int k = (j - i) * 2 + v[i] - v[j] + 1; res += max(min(l, k) - max(k - r, 0ll) + 1, 0ll) * k; long long int ll = max(k - r, 0ll), rr = min(l, k); if (ll <= rr) { res -= (rr + 1) * rr / 2 - ll * (ll - 1) / 2; } res += r * max(min(k - r - 1, l) + 1, 0ll); } } } } cout << res; }

Compilation message (stderr)

Main.cpp: In member function 'void FENWICK::update(long long int, long long int)':
Main.cpp:27:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |         while (x < v.size()) {
      |                ~~^~~~~~~~~~
Main.cpp: In function 'int main()':
Main.cpp:64:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   64 |             for (int i = 0; i < v.size(); i++) {
      |                             ~~^~~~~~~~~~
Main.cpp:65:35: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   65 |                 for (int j = i; j < v.size(); j++) {
      |                                 ~~^~~~~~~~~~
Main.cpp:69:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   69 |                     if (j == v.size() - 1) r = n - v[j];
      |                         ~~^~~~~~~~~~~~~~~
Main.cpp:38:22: warning: unused variable 'd' [-Wunused-variable]
   38 |     long long int n, d = 0, res = 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...