Submission #50115

#TimeUsernameProblemLanguageResultExecution timeMemory
50115SpaimaCarpatilorRope (JOI17_rope)C++17
100 / 100
1884 ms102840 KiB
#include<bits/stdc++.h> using namespace std; int N, M, ans[1000009], g[1000009], h[1000009], a[1000009], id[1000009]; vector < int > v[1000009]; bool cmp (int i, int j) { return (g[i] > g[j]); } int main () { //freopen ("input", "r", stdin); //freopen ("output", "w", stdout); scanf ("%d %d", &N, &M); for (int i=1; i<=M; i++) ans[i] = N, id[i] = i; for (int i=1; i<=N; i++) scanf ("%d", &a[i]), ans[a[i]] --; for (int shift = 0; shift < 2; shift ++) { int all = 0; for (int i=shift + 1; i<N; i+=2) { all ++; g[a[i]] ++, g[a[i + 1]] ++; if (a[i] != a[i + 1]) v[a[i]].push_back (a[i + 1]), v[a[i + 1]].push_back (a[i]); } sort (id + 1, id + M + 1, cmp); for (int i=1; i<=M; i++) { for (auto j : v[i]) h[j] ++; int extra = 0; if (shift == 1 && a[1] != i) h[a[1]] --, extra ++; if (shift != N % 2 && a[N] != i) h[a[N]] --, extra ++; ///min 2 * all + extra - g[i] - (g[j] - h[j]) = 2 * all + extra - g[i] - max (g[j] - h[j]) int p = 1, curr = ans[i]; while (p <= M && (h[id[p]] != 0 || id[p] == i)) p ++; if (p <= M) curr = min (curr, 2 * all + extra - g[i] - g[id[p]]); vector < int > currJ = v[i]; if (shift == 1 && a[1] != i) currJ.push_back (a[1]); if (shift != N % 2 && a[N] != i) currJ.push_back (a[N]); for (auto j : currJ) curr = min (curr, 2 * all + extra - g[i] - (g[j] - h[j])); if (curr < ans[i]) ans[i] = curr; /// for (auto j : v[i]) h[j] --; if (shift == 1 && a[1] != i) h[a[1]] ++; if (shift != N % 2 && a[N] != i) h[a[N]] ++; /*for (int j=i + 1; j<=M; j++) { int curr = 2 * all - g[i] - g[j] + h[i][j]; if (shift == 1) curr += (a[1] != i && a[1] != j); if (N % 2 != shift) curr += (a[N] != i && a[N] != j); if (curr < ans[i]) ans[i] = curr; if (curr < ans[j]) ans[j] = curr; }*/ } for (int i=1; i<=M; i++) g[i] = h[i] = 0, v[i].clear (); } for (int i=1; i<=M; i++) printf ("%d\n", ans[i]); return 0; }

Compilation message (stderr)

rope.cpp: In function 'int main()':
rope.cpp:18:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
 scanf ("%d %d", &N, &M);
 ~~~~~~^~~~~~~~~~~~~~~~~
rope.cpp:22:24: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf ("%d", &a[i]), ans[a[i]] --;
     ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
#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...