Submission #380256

#TimeUsernameProblemLanguageResultExecution timeMemory
380256peijarGroup Photo (JOI21_ho_t3)C++17
100 / 100
809 ms756 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); Fenwick fen2(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) { int coutPlacement = dp[dejaPlace]; for (int placeApres(1); placeApres + dejaPlace <= nbElem; ++placeApres) { int iPos = placeApres + dejaPlace - 1; coutPlacement += fen.sum(positions[iPos]); coutPlacement -= fen2.sum(positions[iPos]+1, nbElem); fen2.update(positions[iPos], 1); /*for (int iPos = dejaPlace + placeApres-1; iPos >= dejaPlace; --iPos) { coutPlacement += fen.sum(positions[iPos]); fen.update(positions[iPos], -1); } 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); } for (int placeApres(1); placeApres + dejaPlace <= nbElem; ++placeApres) fen2.update(positions[placeApres+dejaPlace-1], -1); fen.update(positions[dejaPlace], -1); } 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...