Submission #1692587
Source Code Expand
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ull; constexpr int TEN(int n) { return (n==0)?1:10*TEN(n-1); } struct Node { using NP = Node*; int ma = -1; int get(int a, int b) { if (b <= 0 or sz <= a) return -1; if (a <= 0 and sz <= b) return ma; return max(l->get(a, b), r->get(a-sz/2, b-sz/2)); } void set(int k, int x) { if (sz == 1) { ma = x; return; } if (k < sz/2) l->set(k, x); else r->set(k-sz/2, x); ma = max(l->ma, r->ma); } NP l, r; int sz; Node(int sz) : sz(sz) { if (sz == 1) return; l = new Node(sz/2); r = new Node(sz - sz/2); } }; int main() { int n, k; scanf("%d %d", &n, &k); int p[n], q[n]; for (int i = 0; i < n; i++) { scanf("%d", p+i); p[i]--; } for (int i = 0; i < n; i++) q[p[i]] = i; Node* rmq = new Node(n); int mi[n]; vector<vector<int>> g(n); for (int i = 0; i < n; i++) { { int v = rmq->get(max(0, q[i]-k+1), q[i]); if (v != -1) { int qv = q[v]; g[q[i]].push_back(qv); } } { int v = rmq->get(q[i], min(n, q[i]+k)); if (v != -1) { int qv = q[v]; g[q[i]].push_back(qv); } rmq->set(q[i], i); } rmq->set(q[i], i); } int deg[n]; fill_n(deg, n, 0); for (int i = 0; i < n; i++) for (int j: g[i]) deg[j]++; priority_queue<int> que; for (int i = 0; i < n; i++) if (deg[i] == 0) que.push(i); vector<int> v; while (que.size()) { int p = que.top(); que.pop(); v.push_back(p); for (int d: g[p]) { deg[d]--; if (deg[d] == 0) que.push(d); } } reverse(v.begin(), v.end()); int ans[n]; for (int i = 0; i < n; i++) ans[v[i]] = i+1; for (int i = 0; i < n; i++) printf("%d\n", ans[i]); }
Submission Info
Submission Time | |
---|---|
Task | F - Wide Swap |
User | c313827 |
Language | C++14 (Clang 3.8.0) |
Score | 0 |
Code Size | 1827 Byte |
Status | CE |
Compile Error
./Main.cpp:1:9: fatal error: 'bits/stdc++.h' file not found #include<bits/stdc++.h> ^ 1 error generated.