Submission #1302422

#TimeUsernameProblemLanguageResultExecution timeMemory
1302422ArtTowers (NOI22_towers)C++20
100 / 100
562 ms192328 KiB
/// - Art - #include <bits/stdc++.h> #define el cout << '\n' #define MASK(x) (1 << (x)) #define BIT(i, x) ((x) >> (i) & 1) #define corved(x) ((BIT(0, x) && BIT(1, x)) || (BIT(2, x) && BIT(3, x))) #define FOR(i, a, b) for (int i = (a), _b = (b); i <= _b; ++i) #define REV(i, b, a) for (int i = (b), _a = (a); i >= _a; --i) #define REP(i, c) for (int i = 0, _c = (c); i < _c; ++i) const int N = 1e6 + 7; using namespace std; int n; pair<int, int> p[N]; set<pair<int, int>> row[N], col[N]; bool ans[N]; int pos[N]; void dfs(int idx, int val) { auto [x, y] = p[idx]; if (pos[idx] == 0) { col[y].emplace(x, idx); } ans[idx] = 1; pos[idx] |= val; if ((int)col[y].size() < 3) { return; } int ridx = next(col[y].begin())->second; auto [rx, ry] = p[ridx]; col[ry].erase({rx, ridx}); if (pos[ridx] == 1) { auto it = row[rx].lower_bound({ry, ridx}); it = row[rx].erase(it); dfs(it->second, 1); } else if (pos[ridx] == 2) { auto it = row[rx].lower_bound({ry, ridx}); it = prev(row[rx].erase(it)); dfs(it->second, 2); } else { row[rx].erase({ry, ridx}); } ans[ridx] = pos[ridx] = 0; } int main() { #define name "slamp" if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); } ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n; FOR (i, 1, n) { int x, y; cin >> x >> y; p[i] = make_pair(x, y); row[x].emplace(y, i); } FOR (i, 1, 1e6) if (!row[i].empty()) { dfs(row[i].begin()->second, 1); dfs(prev(row[i].end())->second, 2); } FOR (i, 1, n) { cout << ans[i]; } el; return 0; } /* 9 1 1 1 2 1 3 2 1 2 2 2 3 3 1 3 2 3 3 */ /* 8 1 5 3 5 6 7 6 5 6 1 3 7 6 3 5 5 */

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:60:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   60 |         freopen(name".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:61:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   61 |         freopen(name".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...