Submission #380252

#TimeUsernameProblemLanguageResultExecution timeMemory
380252peijarGroup Photo (JOI21_ho_t3)C++17
44 / 100
5050 ms492 KiB
#include <bits/stdc++.h> #define int long long using namespace std; struct Fenwick { int N; vector<int> BIT; Fenwick(int n) : N(n+1), BIT(N) {} void update(int iPos, int delta) { for (iPos++; iPos < N; iPos += iPos & -iPos) BIT[iPos] += delta; } int sum(int r) // sum < r { int sol(0); for (; r; r -= r * -r) sol += BIT[r]; return sol; } int sum(int l, int r) // l <= i < r { return sum(r) - sum(l); } }; signed main(void) { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int nbElem; cin >> nbElem; vector<int> hauteurs(nbElem); vector<int> positions(nbElem); for (int iPos = 0; iPos < nbElem; ++iPos) { cin >> hauteurs[iPos]; --hauteurs[iPos]; positions[hauteurs[iPos]] = iPos; } Fenwick fen(nbElem+1); for (int iPos = 0; iPos < nbElem; ++iPos) fen.update(iPos, 1); vector<int> dp(nbElem+1, 1e18); dp[0] = 0; for (int dejaPlace(0); dejaPlace < nbElem; ++dejaPlace) { for (int placeApres(1); placeApres + dejaPlace <= nbElem; ++placeApres) { int coutPlacement = dp[dejaPlace]; for (int iPos = dejaPlace; iPos < dejaPlace+placeApres; ++iPos) for (int j(0); j < positions[iPos]; ++j) if (hauteurs[j] >= dejaPlace and (hauteurs[j] >= dejaPlace + placeApres or hauteurs[j] < iPos)) ++coutPlacement; dp[dejaPlace+placeApres] = min(dp[dejaPlace+placeApres], coutPlacement); } } cout << dp[nbElem] << 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...