Submission #681552

#TimeUsernameProblemLanguageResultExecution timeMemory
681552peijarFurniture (JOI20_furniture)C++17
5 / 100
5043 ms23952 KiB
#include <bits/stdc++.h> #define int long long using namespace std; namespace std { template <typename T> ostream &operator<<(ostream &out, const vector<T> &vec) { out << "["; for (int i = 0; i < (int)vec.size(); ++i) { out << vec[i]; if (i + 1 < (int)vec.size()) out << ", "; } return out << "]"; } } // namespace std void dbg_out() { cout << endl; } template <typename Head, typename... Tail> void dbg_out(Head H, Tail... T) { cout << ' ' << H; dbg_out(T...); } #ifdef DEBUG #define dbg(...) cout << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__) #else #define dbg(...) #endif const int INF = 1e18; signed main(void) { ios_base::sync_with_stdio(false); cin.tie(0); int nbLig, nbCol; cin >> nbLig >> nbCol; vector<vector<int>> dateDel(nbLig, vector<int>(nbCol)); for (int lig = 0; lig < nbLig; ++lig) for (int col = 0; col < nbCol; ++col) { int x; cin >> x; if (!x) dateDel[lig][col] = INF; else dateDel[lig][col] = 0; } int nbRequetes; cin >> nbRequetes; vector<pair<int, int>> queries(nbRequetes); for (auto &[r, c] : queries) { cin >> r >> c; --r, --c; } for (int i = 0; i < nbRequetes; ++i) { auto [r, c] = queries[i]; dateDel[r][c] = i + 1; } auto canReach = [&](int minDate) { vector<vector<int>> dp(nbLig, vector<int>(nbCol)); for (int lig = 0; lig < nbLig; ++lig) for (int col = 0; col < nbCol; ++col) { if (lig) dp[lig][col] |= dp[lig - 1][col]; if (col) dp[lig][col] |= dp[lig][col - 1]; if (!col and !lig) dp[lig][col] = 1; if (dateDel[lig][col] < minDate) dp[lig][col] = 0; } return dp[nbLig - 1][nbCol - 1]; }; while (true) { int lo = 1, up = nbRequetes + 1; while (lo < up) { int mid = (lo + up + 1) / 2; if (canReach(mid)) lo = mid; else up = mid - 1; } dbg(lo); for (int i = 0; i < lo - 1; ++i) { auto [r, c] = queries[i]; if (dateDel[r][c] != i + 1) continue; dateDel[r][c] = 0; dbg("DELETE", r, c); } if (lo == nbRequetes + 1) break; auto [r, c] = queries[lo - 1]; dateDel[r][c] = INF; dbg("KEEP", r, c); } for (auto [r, c] : queries) { cout << (dateDel[r][c] == 0) << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...