Submission #87491

# Submission time Handle Problem Language Result Execution time Memory
87491 2018-12-01T02:06:17 Z tieunhi Port Facility (JOI17_port_facility) C++14
100 / 100
3499 ms 374488 KB
#include <bits/stdc++.h>
#define pii pair<int, int>
#define mp make_pair
#define F first
#define S second
#define PB push_back
#define FOR(i, u, v) for (int i = u; i <= v; i++)
#define FORD(i, v, u) for (int i = v; i >= u; i--)
#define ll long long
#define mid (r + l)/2
#define N 2000005
#define LN 19
#define maxc 1000000007

using namespace std;

int n, pos[N], a[N], dd[N];
pii seg[N];

struct IntervalTree
{
    int tmin[N << 2], tmax[N << 2];

    void calc(int id)
    {
        tmin[id] = min(tmin[id*2], tmin[id*2+1]);
        tmax[id] = max(tmax[id*2], tmax[id*2+1]);
    }
    void build(int l, int r, int id)
    {
        if (l == r)
        {
            tmin[id] = tmax[id] = a[l];
            return;
        }
        build(l, mid, id*2);
        build(mid+1, r, id*2+1);
        calc(id);
    }
    void disable(int l, int r, int id, int x)
    {
        if (l == r)
        {
            tmin[id] = maxc; tmax[id] = 0;
            return;
        }
        if (x <= mid) disable(l, mid, id*2, x);
        else disable(mid+1, r, id*2+1, x);
        calc(id);
    }
    int getMin(int l, int r, int id, int x, int y)
    {
        if (l > y || r < x) return maxc;
        if (l >= x && r <= y) return tmin[id];
        return min(getMin(l, mid, id*2, x, y), getMin(mid+1, r, id*2+1, x, y));
    }
    int getMax(int l, int r, int id, int x, int y)
    {
        if (l > y || r < x) return 0;
        if (l >= x && r <= y) return tmax[id];
        return max(getMax(l, mid, id*2, x, y), getMax(mid+1, r, id*2+1, x, y));
    }
}t;

void stop() {cout <<0; exit(0);}
void DFS(int u, int col)
{
    dd[u] = col;
    t.disable(1, 2*n, 1, seg[u].F);
    t.disable(1, 2*n, 1, seg[u].S);
    while (1)
    {
        int l = t.getMin(1, 2*n, 1, seg[u].F, seg[u].S);
        if (l >= seg[u].F) break;
        int v = pos[l];
        if (dd[v] != -1)
            if (dd[v] != (col^1)) stop();
        DFS(v, col^1);
    }
    while (1)
    {
        int r = t.getMax(1, 2*n, 1, seg[u].F, seg[u].S);
        if (r <= seg[u].S) break;
        int v = pos[r];
        if (dd[v] != -1)
            if (dd[v] != (col^1)) stop();
        DFS(v, col^1);
    }
}
bool check()
{
    stack<int> v[2];
    FOR(i, 1, 2*n)
    {
        int u = pos[i];
        int type = dd[u];
        if (i == seg[u].F) v[type].push(u);
        else
        {
            if (v[type].top() != u) return 0;
            v[type].pop();
        }
    }
    return 1;
}
int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    //freopen("INP.TXT", "r", stdin);
    cin >> n;
    FOR(i, 1, n)
    {
        int u, v; cin >> u >> v;
        seg[i] = mp(u, v);
    }
    sort(seg+1, seg+n+1);
    FOR(i, 1, n)
    {
        int u = seg[i].F, v = seg[i].S;
        a[u] = v; a[v] = u;
        pos[u] = pos[v] = i;
    }
    t.build(1, 2*n, 1);
    memset(dd, -1, sizeof dd);

    int res = 1;
    FOR(i, 1, n)
    {
        if (dd[i] != -1) continue;
        DFS(i, 0);
        res = (res*2) % maxc;
    }
    if (check()) cout <<res;
    else stop();
}
# Verdict Execution time Memory Grader output
1 Correct 10 ms 8164 KB Output is correct
2 Correct 10 ms 8180 KB Output is correct
3 Correct 8 ms 8328 KB Output is correct
4 Correct 9 ms 8408 KB Output is correct
5 Correct 9 ms 8408 KB Output is correct
6 Correct 9 ms 8408 KB Output is correct
7 Correct 10 ms 8424 KB Output is correct
8 Correct 11 ms 8424 KB Output is correct
9 Correct 8 ms 8424 KB Output is correct
10 Correct 8 ms 8424 KB Output is correct
11 Correct 11 ms 8424 KB Output is correct
12 Correct 9 ms 8424 KB Output is correct
13 Correct 8 ms 8428 KB Output is correct
14 Correct 9 ms 8428 KB Output is correct
15 Correct 10 ms 8428 KB Output is correct
16 Correct 10 ms 8428 KB Output is correct
17 Correct 9 ms 8428 KB Output is correct
18 Correct 10 ms 8556 KB Output is correct
19 Correct 9 ms 8556 KB Output is correct
20 Correct 9 ms 8556 KB Output is correct
21 Correct 9 ms 8556 KB Output is correct
22 Correct 9 ms 8556 KB Output is correct
23 Correct 9 ms 8556 KB Output is correct
24 Correct 9 ms 8556 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 10 ms 8164 KB Output is correct
2 Correct 10 ms 8180 KB Output is correct
3 Correct 8 ms 8328 KB Output is correct
4 Correct 9 ms 8408 KB Output is correct
5 Correct 9 ms 8408 KB Output is correct
6 Correct 9 ms 8408 KB Output is correct
7 Correct 10 ms 8424 KB Output is correct
8 Correct 11 ms 8424 KB Output is correct
9 Correct 8 ms 8424 KB Output is correct
10 Correct 8 ms 8424 KB Output is correct
11 Correct 11 ms 8424 KB Output is correct
12 Correct 9 ms 8424 KB Output is correct
13 Correct 8 ms 8428 KB Output is correct
14 Correct 9 ms 8428 KB Output is correct
15 Correct 10 ms 8428 KB Output is correct
16 Correct 10 ms 8428 KB Output is correct
17 Correct 9 ms 8428 KB Output is correct
18 Correct 10 ms 8556 KB Output is correct
19 Correct 9 ms 8556 KB Output is correct
20 Correct 9 ms 8556 KB Output is correct
21 Correct 9 ms 8556 KB Output is correct
22 Correct 9 ms 8556 KB Output is correct
23 Correct 9 ms 8556 KB Output is correct
24 Correct 9 ms 8556 KB Output is correct
25 Correct 12 ms 8700 KB Output is correct
26 Correct 9 ms 8700 KB Output is correct
27 Correct 12 ms 8700 KB Output is correct
28 Correct 13 ms 8700 KB Output is correct
29 Correct 11 ms 8828 KB Output is correct
30 Correct 13 ms 8828 KB Output is correct
31 Correct 11 ms 8828 KB Output is correct
32 Correct 10 ms 8828 KB Output is correct
33 Correct 11 ms 8828 KB Output is correct
34 Correct 11 ms 8828 KB Output is correct
35 Correct 11 ms 8828 KB Output is correct
36 Correct 13 ms 8828 KB Output is correct
37 Correct 11 ms 8828 KB Output is correct
38 Correct 11 ms 8828 KB Output is correct
39 Correct 11 ms 8828 KB Output is correct
40 Correct 10 ms 8828 KB Output is correct
41 Correct 11 ms 8828 KB Output is correct
42 Correct 11 ms 8828 KB Output is correct
43 Correct 11 ms 8828 KB Output is correct
44 Correct 8 ms 8828 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 10 ms 8164 KB Output is correct
2 Correct 10 ms 8180 KB Output is correct
3 Correct 8 ms 8328 KB Output is correct
4 Correct 9 ms 8408 KB Output is correct
5 Correct 9 ms 8408 KB Output is correct
6 Correct 9 ms 8408 KB Output is correct
7 Correct 10 ms 8424 KB Output is correct
8 Correct 11 ms 8424 KB Output is correct
9 Correct 8 ms 8424 KB Output is correct
10 Correct 8 ms 8424 KB Output is correct
11 Correct 11 ms 8424 KB Output is correct
12 Correct 9 ms 8424 KB Output is correct
13 Correct 8 ms 8428 KB Output is correct
14 Correct 9 ms 8428 KB Output is correct
15 Correct 10 ms 8428 KB Output is correct
16 Correct 10 ms 8428 KB Output is correct
17 Correct 9 ms 8428 KB Output is correct
18 Correct 10 ms 8556 KB Output is correct
19 Correct 9 ms 8556 KB Output is correct
20 Correct 9 ms 8556 KB Output is correct
21 Correct 9 ms 8556 KB Output is correct
22 Correct 9 ms 8556 KB Output is correct
23 Correct 9 ms 8556 KB Output is correct
24 Correct 9 ms 8556 KB Output is correct
25 Correct 12 ms 8700 KB Output is correct
26 Correct 9 ms 8700 KB Output is correct
27 Correct 12 ms 8700 KB Output is correct
28 Correct 13 ms 8700 KB Output is correct
29 Correct 11 ms 8828 KB Output is correct
30 Correct 13 ms 8828 KB Output is correct
31 Correct 11 ms 8828 KB Output is correct
32 Correct 10 ms 8828 KB Output is correct
33 Correct 11 ms 8828 KB Output is correct
34 Correct 11 ms 8828 KB Output is correct
35 Correct 11 ms 8828 KB Output is correct
36 Correct 13 ms 8828 KB Output is correct
37 Correct 11 ms 8828 KB Output is correct
38 Correct 11 ms 8828 KB Output is correct
39 Correct 11 ms 8828 KB Output is correct
40 Correct 10 ms 8828 KB Output is correct
41 Correct 11 ms 8828 KB Output is correct
42 Correct 11 ms 8828 KB Output is correct
43 Correct 11 ms 8828 KB Output is correct
44 Correct 8 ms 8828 KB Output is correct
45 Correct 158 ms 16700 KB Output is correct
46 Correct 158 ms 18188 KB Output is correct
47 Correct 146 ms 18188 KB Output is correct
48 Correct 173 ms 18188 KB Output is correct
49 Correct 151 ms 18188 KB Output is correct
50 Correct 149 ms 18188 KB Output is correct
51 Correct 145 ms 18188 KB Output is correct
52 Correct 106 ms 18188 KB Output is correct
53 Correct 121 ms 18188 KB Output is correct
54 Correct 162 ms 26224 KB Output is correct
55 Correct 172 ms 26224 KB Output is correct
56 Correct 180 ms 26224 KB Output is correct
57 Correct 109 ms 26224 KB Output is correct
58 Correct 100 ms 26224 KB Output is correct
59 Correct 128 ms 26224 KB Output is correct
60 Correct 131 ms 26224 KB Output is correct
61 Correct 142 ms 26224 KB Output is correct
62 Correct 123 ms 26224 KB Output is correct
63 Correct 138 ms 26224 KB Output is correct
64 Correct 144 ms 26224 KB Output is correct
65 Correct 235 ms 26224 KB Output is correct
66 Correct 236 ms 26224 KB Output is correct
67 Correct 157 ms 26224 KB Output is correct
68 Correct 166 ms 26224 KB Output is correct
69 Correct 167 ms 26224 KB Output is correct
70 Correct 168 ms 26224 KB Output is correct
71 Correct 175 ms 26372 KB Output is correct
72 Correct 175 ms 26372 KB Output is correct
73 Correct 166 ms 26372 KB Output is correct
74 Correct 169 ms 26372 KB Output is correct
75 Correct 133 ms 26372 KB Output is correct
76 Correct 148 ms 26372 KB Output is correct
77 Correct 145 ms 26372 KB Output is correct
78 Correct 162 ms 26372 KB Output is correct
79 Correct 155 ms 26372 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 10 ms 8164 KB Output is correct
2 Correct 10 ms 8180 KB Output is correct
3 Correct 8 ms 8328 KB Output is correct
4 Correct 9 ms 8408 KB Output is correct
5 Correct 9 ms 8408 KB Output is correct
6 Correct 9 ms 8408 KB Output is correct
7 Correct 10 ms 8424 KB Output is correct
8 Correct 11 ms 8424 KB Output is correct
9 Correct 8 ms 8424 KB Output is correct
10 Correct 8 ms 8424 KB Output is correct
11 Correct 11 ms 8424 KB Output is correct
12 Correct 9 ms 8424 KB Output is correct
13 Correct 8 ms 8428 KB Output is correct
14 Correct 9 ms 8428 KB Output is correct
15 Correct 10 ms 8428 KB Output is correct
16 Correct 10 ms 8428 KB Output is correct
17 Correct 9 ms 8428 KB Output is correct
18 Correct 10 ms 8556 KB Output is correct
19 Correct 9 ms 8556 KB Output is correct
20 Correct 9 ms 8556 KB Output is correct
21 Correct 9 ms 8556 KB Output is correct
22 Correct 9 ms 8556 KB Output is correct
23 Correct 9 ms 8556 KB Output is correct
24 Correct 9 ms 8556 KB Output is correct
25 Correct 12 ms 8700 KB Output is correct
26 Correct 9 ms 8700 KB Output is correct
27 Correct 12 ms 8700 KB Output is correct
28 Correct 13 ms 8700 KB Output is correct
29 Correct 11 ms 8828 KB Output is correct
30 Correct 13 ms 8828 KB Output is correct
31 Correct 11 ms 8828 KB Output is correct
32 Correct 10 ms 8828 KB Output is correct
33 Correct 11 ms 8828 KB Output is correct
34 Correct 11 ms 8828 KB Output is correct
35 Correct 11 ms 8828 KB Output is correct
36 Correct 13 ms 8828 KB Output is correct
37 Correct 11 ms 8828 KB Output is correct
38 Correct 11 ms 8828 KB Output is correct
39 Correct 11 ms 8828 KB Output is correct
40 Correct 10 ms 8828 KB Output is correct
41 Correct 11 ms 8828 KB Output is correct
42 Correct 11 ms 8828 KB Output is correct
43 Correct 11 ms 8828 KB Output is correct
44 Correct 8 ms 8828 KB Output is correct
45 Correct 158 ms 16700 KB Output is correct
46 Correct 158 ms 18188 KB Output is correct
47 Correct 146 ms 18188 KB Output is correct
48 Correct 173 ms 18188 KB Output is correct
49 Correct 151 ms 18188 KB Output is correct
50 Correct 149 ms 18188 KB Output is correct
51 Correct 145 ms 18188 KB Output is correct
52 Correct 106 ms 18188 KB Output is correct
53 Correct 121 ms 18188 KB Output is correct
54 Correct 162 ms 26224 KB Output is correct
55 Correct 172 ms 26224 KB Output is correct
56 Correct 180 ms 26224 KB Output is correct
57 Correct 109 ms 26224 KB Output is correct
58 Correct 100 ms 26224 KB Output is correct
59 Correct 128 ms 26224 KB Output is correct
60 Correct 131 ms 26224 KB Output is correct
61 Correct 142 ms 26224 KB Output is correct
62 Correct 123 ms 26224 KB Output is correct
63 Correct 138 ms 26224 KB Output is correct
64 Correct 144 ms 26224 KB Output is correct
65 Correct 235 ms 26224 KB Output is correct
66 Correct 236 ms 26224 KB Output is correct
67 Correct 157 ms 26224 KB Output is correct
68 Correct 166 ms 26224 KB Output is correct
69 Correct 167 ms 26224 KB Output is correct
70 Correct 168 ms 26224 KB Output is correct
71 Correct 175 ms 26372 KB Output is correct
72 Correct 175 ms 26372 KB Output is correct
73 Correct 166 ms 26372 KB Output is correct
74 Correct 169 ms 26372 KB Output is correct
75 Correct 133 ms 26372 KB Output is correct
76 Correct 148 ms 26372 KB Output is correct
77 Correct 145 ms 26372 KB Output is correct
78 Correct 162 ms 26372 KB Output is correct
79 Correct 155 ms 26372 KB Output is correct
80 Correct 1617 ms 80776 KB Output is correct
81 Correct 1611 ms 93960 KB Output is correct
82 Correct 1518 ms 104928 KB Output is correct
83 Correct 1616 ms 123296 KB Output is correct
84 Correct 1641 ms 138944 KB Output is correct
85 Correct 1568 ms 148600 KB Output is correct
86 Correct 1527 ms 166612 KB Output is correct
87 Correct 1108 ms 173752 KB Output is correct
88 Correct 1352 ms 192400 KB Output is correct
89 Correct 1833 ms 316464 KB Output is correct
90 Correct 1723 ms 316464 KB Output is correct
91 Correct 1709 ms 316464 KB Output is correct
92 Correct 1164 ms 316464 KB Output is correct
93 Correct 1080 ms 316464 KB Output is correct
94 Correct 1330 ms 316464 KB Output is correct
95 Correct 1453 ms 316464 KB Output is correct
96 Correct 1504 ms 316464 KB Output is correct
97 Correct 1339 ms 316464 KB Output is correct
98 Correct 1427 ms 316464 KB Output is correct
99 Correct 1469 ms 316464 KB Output is correct
100 Correct 3254 ms 372288 KB Output is correct
101 Correct 3499 ms 372288 KB Output is correct
102 Correct 1808 ms 372288 KB Output is correct
103 Correct 1739 ms 372288 KB Output is correct
104 Correct 1699 ms 372288 KB Output is correct
105 Correct 1756 ms 372288 KB Output is correct
106 Correct 1775 ms 374424 KB Output is correct
107 Correct 1773 ms 374488 KB Output is correct
108 Correct 1744 ms 374488 KB Output is correct
109 Correct 1774 ms 374488 KB Output is correct
110 Correct 1412 ms 374488 KB Output is correct
111 Correct 1349 ms 374488 KB Output is correct
112 Correct 1334 ms 374488 KB Output is correct
113 Correct 1549 ms 374488 KB Output is correct
114 Correct 1601 ms 374488 KB Output is correct