Submission #854349

#TimeUsernameProblemLanguageResultExecution timeMemory
854349mzhBob (COCI14_bob)C++17
120 / 120
92 ms16536 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<vector<pair<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; } int cnt = 1; while (!lengths[j].empty() && lengths[j].back().first > streak[i][j]) { sum[j] -= (lengths[j].back().first - streak[i][j]) * lengths[j].back().second; cnt += lengths[j].back().second; lengths[j].pop_back(); } lengths[j].push_back({streak[i][j], cnt}); 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...