-
Notifications
You must be signed in to change notification settings - Fork 59
/
Copy pathcarray.cpp
50 lines (48 loc) · 1.08 KB
/
carray.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# include <cstdio>
# include <algorithm>
# include <vector>
# define NR 530005
using namespace std;
vector <int> v[NR];
int i,j,n,m,x,y,Q,ai,bi;
long long a[25000], H[NR], nr;
bool ap[NR];
void numara (int k) {
ap[k]=1;
for (int i=0; i<v[k].size(); ++i) {
if (! ap[v[k][i]]) numara (v[k][i]);
H[k]+=H[v[k][i]];
}
}
void query (int k, long long nr) {
if (H[k]==1) {
printf ("%d\n", a[k]);
}
else {
if (nr<=H[v[k][0]]) query (v[k][0], nr);
else query (v[k][1], nr-H[v[k][0]]);
}
}
int main ()
{
freopen ("carray.in", "r", stdin);
freopen ("carray.out", "w", stdout);
scanf ("%d%d%d", &n, &m, &Q);
for (i=1; i<=n; ++i) {
scanf ("%d", &a[i]);
H[i]=1; ap[i]=1;
}
for (i=n+1; i<=n+m; ++i) {
scanf ("%d%d", &ai, &bi);
v[i].push_back(ai);
v[i].push_back(bi);
}
//numaram
for (i=n+1; i<=n+m; ++i)
if (! ap[i]) numara (i);
for (i=1; i<=Q; ++i) {
scanf ("%d%lld", &x, &nr);
query (x, nr);
}
return 0;
}