Submission #1236364

#TimeUsernameProblemLanguageResultExecution timeMemory
1236364altern23Bob (COCI14_bob)C++20
120 / 120
171 ms48264 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ld long double #define pii pair<ll, ll> #define fi first #define sec second const int MAXN = 1e3; const ll INF = 2e18; ll A[MAXN + 5][MAXN + 5], lst[MAXN + 5][MAXN + 5]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int tc = 1; // cin >> tc; for(;tc--;){ ll N, M; cin >> N >> M; vector<ll> v; for(int i = 1; i <= N; i++){ for(int j = 1; j <= M; j++){ cin >> A[i][j]; v.push_back(A[i][j]); } } sort(v.begin(), v.end()); v.erase(unique(v.begin(), v.end()), v.end()); ll K = v.size(); vector<pii> pos[K + 5]; for(int i = 1; i <= N; i++){ for(int j = 1; j <= M; j++){ A[i][j] = lower_bound(v.begin(), v.end(), A[i][j]) - v.begin() + 1; pos[A[i][j]].push_back({i, j}); } } for(int i = 1; i <= M; i++){ for(int j = 1; j <= N; j++){ if(A[j][i] != A[j - 1][i]) lst[j][i] = j - 1; else lst[j][i] = lst[j - 1][i]; } } ll ans = 0; for(int color = 1; color <= K; color++){ stack<pii> stk; ll lst_i = 0, lst_j = 0; ll cur = 0; for(auto [i, j] : pos[color]){ if(i != lst_i || j - 1 != lst_j){ cur = 0; while(!stk.empty()) stk.pop(); } ll size = 1; while(!stk.empty() && stk.top().fi < lst[i][j]){ size += stk.top().sec; cur -= (i - stk.top().fi) * stk.top().sec; stk.pop(); } cur += (i - lst[i][j]) * size; stk.push({lst[i][j], size}); ans += cur; lst_i = i, lst_j = 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...