Submission #989703

#TimeUsernameProblemLanguageResultExecution timeMemory
989703LOLOLOBob (COCI14_bob)C++17
120 / 120
104 ms13908 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define f first #define s second #define pb push_back #define ep emplace #define eb emplace_back #define lb lower_bound #define ub upper_bound #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define uniquev(v) sort(all(v)), (v).resize(unique(all(v)) - (v).begin()) #define mem(f,x) memset(f , x , sizeof(f)) #define sz(x) (ll)(x).size() #define __lcm(a, b) (1ll * ((a) / __gcd((a), (b))) * (b)) #define mxx *max_element #define mnn *min_element #define cntbit(x) __builtin_popcountll(x) #define len(x) (int)(x.length()) const int N = 1e3 + 10; int mat[N][N], h[N], n, m; ll nxt[N], pr[N]; ll cal(int l, int r) { stack <int> st; for (int i = l; i <= r; i++) { while (sz(st) && h[i] < h[st.top()]) st.pop(); pr[i] = sz(st) ? st.top() + 1 : l; st.push(i); } while (sz(st)) st.pop(); ll ans = 0; for (int i = r; i >= l; i--) { while (sz(st) && h[i] <= h[st.top()]) st.pop(); nxt[i] = sz(st) ? st.top() - 1 : r; ll len = (ll)(nxt[i] - i + 1) * (ll)(i - pr[i] + 1); ans += (ll)h[i] * len; st.push(i); } return ans; } ll solve() { cin >> n >> m; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { cin >> mat[i][j]; } } ll tot = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (mat[i][j] == mat[i - 1][j]) { h[j]++; } else { h[j] = 1; } } int pr = 1; for (int j = 1; j <= m + 1; j++) { if (mat[i][j] != mat[i][pr]) { tot += cal(pr, j - 1); pr = j; } } } return tot; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t = 1; //cin >> t; while (t--) { cout << solve() << '\n'; } return 0; } /* 5 3 2 2 2 2 2 1 1 1 1 2 1 2 1 2 1 */
#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...