Submission #564513

#TimeUsernameProblemLanguageResultExecution timeMemory
564513RealSnakeBuilding Skyscrapers (CEOI19_skyscrapers)C++14
0 / 100
37 ms5452 KiB
#include "bits/stdc++.h" using namespace std; #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set; #define ll long long #define mod 1000000007 ofstream fout(".out"); ifstream fin(".in"); map<pair<int, int>, int> mp; int n, t, j; int a[1500001]; bool vis[1500001]; int xi[8] = {0, 0, 1, 1, 1, -1, -1, -1}; int yi[8] = {-1, 1, -1, 0, -1, -1, 0, -1}; bool check(int x, int y) { return x >= 0 && x < n && y >= 0 && y < n; } signed main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n >> t; vector<pair<int, int>> v; for(int i = 0; i < n; i++) { int x, y; cin >> x >> y; v.push_back({x, y}); mp[{x, y}] = i + 1; } priority_queue<int> pq; pq.push(n - 1); j = n - 1; while(!pq.empty()) { int ind = pq.top(); pq.pop(); vis[ind] = 1; a[j--] = ind; int x = v[ind].first, y = v[ind].second; for(int i = 0; i < 8; i++) { int xx = x + xi[i]; int yy = y + yi[i]; if(check(xx, yy) && mp[{xx, yy}] && !vis[mp[{xx, yy}] - 1]) { vis[mp[{xx, yy}] - 1] = 1; pq.push(mp[{xx, yy}] - 1); } } } if(j >= 0) { cout << "NO"; return 0; } cout << "YES\n"; for(int i = 0; i < n; i++) cout << a[i] + 1 << "\n"; return 0; }
#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...