Skip to content

Commit 2becb3a

Browse files
authored
Merge pull request #387 from AlgorithmWithGod/khj20006
[20250625] BOJ / P5 / 순열복원 / 권혁준
2 parents 23aa304 + e55a009 commit 2becb3a

File tree

1 file changed

+118
-0
lines changed

1 file changed

+118
-0
lines changed
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
```java
2+
import java.util.*;
3+
import java.io.*;
4+
5+
class IOController {
6+
BufferedReader br;
7+
BufferedWriter bw;
8+
StringTokenizer st;
9+
10+
public IOController() {
11+
br = new BufferedReader(new InputStreamReader(System.in));
12+
bw = new BufferedWriter(new OutputStreamWriter(System.out));
13+
st = new StringTokenizer("");
14+
}
15+
16+
String nextLine() throws Exception {
17+
String line = br.readLine();
18+
st = new StringTokenizer(line);
19+
return line;
20+
}
21+
22+
String nextToken() throws Exception {
23+
while (!st.hasMoreTokens()) nextLine();
24+
return st.nextToken();
25+
}
26+
27+
int nextInt() throws Exception {
28+
return Integer.parseInt(nextToken());
29+
}
30+
31+
long nextLong() throws Exception {
32+
return Long.parseLong(nextToken());
33+
}
34+
35+
double nextDouble() throws Exception {
36+
return Double.parseDouble(nextToken());
37+
}
38+
39+
void close() throws Exception {
40+
bw.flush();
41+
bw.close();
42+
}
43+
44+
void write(String content) throws Exception {
45+
bw.write(content);
46+
}
47+
48+
}
49+
50+
public class Main {
51+
52+
static IOController io;
53+
54+
//
55+
56+
static int N;
57+
static int[] A, seg;
58+
59+
public static void main(String[] args) throws Exception {
60+
61+
io = new IOController();
62+
63+
init();
64+
solve();
65+
66+
io.close();
67+
68+
}
69+
70+
public static void init() throws Exception {
71+
72+
N = io.nextInt();
73+
A = new int[N+1];
74+
for(int i=1;i<=N;i++) A[i] = io.nextInt();
75+
seg = new int[4*N];
76+
77+
}
78+
79+
static void solve() throws Exception {
80+
81+
init(1,N,1);
82+
int[] ans = new int[N+1];
83+
for(int i=N;i>=1;i--) {
84+
int a = A[i];
85+
int idx = find(1,N,a+1,1);
86+
ans[idx] = i;
87+
}
88+
89+
for(int i=1;i<=N;i++) io.write(ans[i] + " ");
90+
91+
}
92+
93+
static void init(int s, int e, int n) {
94+
if(s == e) {
95+
seg[n] = 1;
96+
return;
97+
}
98+
int m=(s+e)>>1;
99+
init(s,m,n*2);
100+
init(m+1,e,n*2+1);
101+
seg[n] = seg[n*2] + seg[n*2+1];
102+
}
103+
104+
static int find(int s, int e, int v, int n) {
105+
if(s == e) {
106+
seg[n]--;
107+
return s;
108+
}
109+
int ret = -1;
110+
int m = (s+e)>>1;
111+
if(v > seg[n*2+1]) ret = find(s,m,v-seg[n*2+1],n*2);
112+
else ret = find(m+1,e,v,n*2+1);
113+
seg[n] = seg[n*2] + seg[n*2+1];
114+
return ret;
115+
}
116+
117+
}
118+
```

0 commit comments

Comments
 (0)