Submission #1273383

#TimeUsernameProblemLanguageResultExecution timeMemory
1273383kaiboyRope (JOI17_rope)C++20
100 / 100
821 ms78296 KiB
#include <algorithm> #include <iostream> #include <vector> using namespace std; const int N = 1000000; const int N_ = 1 << 20; int aa[N], st[N_ << 1], n_, ans[N]; vector<int> ii[N]; void pul(int i) { int l = i << 1, r = l ^ 1; st[i] = min(st[l], st[r]); } void build(int n) { for (n_ = 1; n_ < n; n_ <<= 1) ; for (int i = 0; i < n_; i++) st[i + n_] = 0; for (int i = n_ - 1; i; i--) pul(i); } void update(int i, int a) { st[i += n_] += a; while (i >>= 1) pul(i); } int main() { ios_base::sync_with_stdio(false), cin.tie(NULL); int n, a_; cin >> n >> a_; for (int i = 0; i < n; i++) cin >> aa[i], aa[i]--; for (int a = 0; a < a_; a++) ans[a] = n; for (int i_ = 0; i_ < 2; i_++) { build(a_); for (int a = 0; a < a_; a++) ii[a].clear(); int s = 0; for (int i = i_; i <= n; i += 2) { if (i < n) { int a = aa[i]; s++, update(a, -1); ii[a].push_back(i); } if (i) { int a = aa[i - 1]; s++, update(a, -1); if (i == n || a != aa[i]) ii[a].push_back(i); } } for (int a = 0; a < a_; a++) { int x = 0; for (int i : ii[a]) { if (i && i < n && aa[i] != aa[i - 1]) x++; if (i < n) { int a = aa[i]; s--, update(a, 1); } if (i) { int a = aa[i - 1]; s--, update(a, 1); } } ans[a] = min(ans[a], x + s + st[1]); for (int i : ii[a]) { if (i < n) { int a = aa[i]; s++, update(a, -1); } if (i) { int a = aa[i - 1]; s++, update(a, -1); } } } } for (int a = 0; a < a_; a++) cout << ans[a] << '\n'; return 0; }
#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...