#include <bits/stdc++.h>
using namespace std;
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n, m;
    cin >> n >> m;   
    vector<vector<int>> a(n, vector<int>(m));
    for (auto &x : a) for (int &i : x) cin >> i;
    vector<vector<int>> g(n, vector<int>(m, 1));
    for (int i = 1; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (a[i][j] == a[i - 1][j]) g[i][j] = g[i - 1][j] + 1;
        }
    }   
    long long ans = 0;
    for (int i = 0; i < n; i++) {
        stack<tuple<int, int, int>> s;
        long long sum = 0;
        int p = 0;
        for (int j = 0; j < m; j++) {
            if (j && a[i][j] != a[i][j - 1]) {
                while (!s.empty()) s.pop();
                sum = g[i][j];
                s.emplace(g[i][j], j, 1);
                p = j;
            }
            else {
                while (!s.empty() && get<0>(s.top()) >= g[i][j]) {
                    auto [x, y, z] = s.top();
                    s.pop();
                    sum -= x * z;
                }
                if (s.empty()) {
                    s.emplace(g[i][j], p, j - p + 1);
                    sum += g[i][j] * (j - p + 1);
                }
                else {
                    int t = get<1>(s.top()) + get<2>(s.top()) - 1;
                    s.emplace(g[i][j], t + 1, j - t);
                    sum += g[i][j] * (j - t);
                }
            }
            ans += sum;
        }
    }
    cout << ans;
    return 0;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |