Submission #854346

#TimeUsernameProblemLanguageResultExecution timeMemory
854346mzhBob (COCI14_bob)C++17
120 / 120
135 ms10656 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define all(x) begin(x), end(x) int nxt() { int x; cin >> x; return x; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n = nxt(), m = nxt(); vector<vector<int>> a(n, vector<int>(m)); for (int i = 0; i < n; i++) { generate(all(a[i]), nxt); } vector<vector<int>> streak(n, vector<int>(m, 1)); for (int i = 0; i < n; i++) { for (int j = 1; j < m; j++) { if (a[i][j] == a[i][j - 1]) { streak[i][j] += streak[i][j - 1]; } } } ll ans = 0; vector<map<int, int>> lengths(m); vector<int> sum(m); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (i > 0 && a[i][j] != a[i - 1][j]) { lengths[j].clear(); sum[j] = 0; } while (!lengths[j].empty() && lengths[j].rbegin()->first > streak[i][j]) { sum[j] -= (lengths[j].rbegin()->first - streak[i][j]) * lengths[j].rbegin()->second; lengths[j][streak[i][j]] += lengths[j].rbegin()->second; lengths[j].erase(prev(lengths[j].end())); } lengths[j][streak[i][j]]++; sum[j] += streak[i][j]; ans += sum[j]; } } cout << ans << '\n'; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...