#include<bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n, m;
cin >> n >> m;
int a[n][m];
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
cin >> a[i][j];
}
}
int b[n][m] {};
for(int j = 0; j < m; j++) {
b[0][j] = 1;
int cnt = 1;
for(int i = 1; i < n; i++) {
if(a[i][j] == a[i - 1][j]) cnt++;
else cnt = 1;
b[i][j] = cnt;
}
}
ll ans = 0, s = 0;
vector<pair<int, int>> v;
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
int cnt = 1;
if(j == 0 || a[i][j] != a[i][j - 1]) {
v.clear();
s = 0;
}
while(!v.empty() && v.back().first >= b[i][j]) {
cnt += v.back().second;
s -= 1LL * (v.back().first * v.back().second);
v.pop_back();
}
s += b[i][j] * cnt;
v.push_back({b[i][j], cnt});
ans += s;
}
}
cout << ans << '\n';
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... |