Submission #1171545

#TimeUsernameProblemLanguageResultExecution timeMemory
1171545nuutsnoyntonBob (COCI14_bob)C++20
120 / 120
232 ms16112 KiB
#include<bits/stdc++.h>

using namespace std;
using ll = long long;
using pll = pair < ll, ll >;
const ll N = 1e3 + 2;
ll a[N][N] = {0}, deesh[N][N] = {0};
int main() {
	ll n, m, r, x, y, lo1, hi1, cnt, s, i, j, ans, t;

	cin >> n >> m;
	
	
	for (i = 1; i <= n; i ++) {
		for (j = 1; j <= m; j ++) {
			cin >> a[i][j];
			deesh[i][j] = 1;
		}
	}
	for (i = 1; i <= n; i ++) {
		for (j=  1; j <= m; j ++) {
			if ( a[i][j] == a[i - 1][j]) deesh[i][j] = deesh[i- 1][j] + 1;
		}
	}
//	cout << "\n";
	ans = 0;
	for (i = 1; i <= n; i ++) {
		s = 0;
		stack < pll > st;
		for (j = 1; j <= m; j ++) {
			if ( j != 1 && a[i][j] != a[i][j - 1]) {
				while(!st.empty()) st.pop();
				 s= 0;
			}
			r = deesh[i][j];
			cnt = 1;
			while ( !st.empty() && st.top().first >= r ) {
				s -= (st.top().first * st.top().second);
				cnt += st.top().second;
				st.pop();
			}
			s = s + (cnt * r);
			st.push(make_pair(r, cnt));
			ans += s;
		}
	}
	cout << ans << endl;
	
}
#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...