Submission #399434

# Submission time Handle Problem Language Result Execution time Memory
399434 2021-05-05T19:20:27 Z duality Port Facility (JOI17_port_facility) C++11
100 / 100
5696 ms 582264 KB
#define DEBUG 0

#include <bits/stdc++.h>
using namespace std;

#if DEBUG
// basic debugging macros
int __i__,__j__;
#define printLine(l) for(__i__=0;__i__<l;__i__++){cout<<"-";}cout<<endl
#define printLine2(l,c) for(__i__=0;__i__<l;__i__++){cout<<c;}cout<<endl
#define printVar(n) cout<<#n<<": "<<n<<endl
#define printArr(a,l) cout<<#a<<": ";for(__i__=0;__i__<l;__i__++){cout<<a[__i__]<<" ";}cout<<endl
#define print2dArr(a,r,c) cout<<#a<<":\n";for(__i__=0;__i__<r;__i__++){for(__j__=0;__j__<c;__j__++){cout<<a[__i__][__j__]<<" ";}cout<<endl;}
#define print2dArr2(a,r,c,l) cout<<#a<<":\n";for(__i__=0;__i__<r;__i__++){for(__j__=0;__j__<c;__j__++){cout<<setw(l)<<setfill(' ')<<a[__i__][__j__]<<" ";}cout<<endl;}

// advanced debugging class
// debug 1,2,'A',"test";
class _Debug {
    public:
        template<typename T>
        _Debug& operator,(T val) {
            cout << val << endl;
            return *this;
        }
};
#define debug _Debug(),
#else
#define printLine(l)
#define printLine2(l,c)
#define printVar(n)
#define printArr(a,l)
#define print2dArr(a,r,c)
#define print2dArr2(a,r,c,l)
#define debug
#endif

// define
#define MAX_VAL 999999999
#define MAX_VAL_2 999999999999999999LL
#define EPS 1e-6
#define mp make_pair
#define pb push_back

// typedef
typedef unsigned int UI;
typedef long long int LLI;
typedef unsigned long long int ULLI;
typedef unsigned short int US;
typedef pair<int,int> pii;
typedef pair<LLI,LLI> plli;
typedef vector<int> vi;
typedef vector<LLI> vlli;
typedef vector<pii> vpii;
typedef vector<plli> vplli;

// ---------- END OF TEMPLATE ----------

int A[1000000],B[1000000];
int order[1000000];
bool comp(int a,int b) {
    return A[a] < A[b];
}
vpii adjList[1000000];
int tt[1 << 22],tree[1 << 22];
int add2(int s,int e,int qs,int qe,int i,int t) {
    if ((s > qe) || (e < qs)) return 0;
    else if ((s >= qs) && (e <= qe)) {
        tt[i] = max(tt[i],t),tree[i] = -1;
        return 0;
    }

    int mid = (s+e) / 2;
    add2(s,mid,qs,qe,2*i+1,t),add2(mid+1,e,qs,qe,2*i+2,t);
    return 0;
}
int update(int s,int e,int ai,int i,int u,int t) {
    if ((s > ai) || (e < ai)) return 0;
    else if (s == e) {
        if (t < tt[i]) {
            if (tree[i] == -1) tree[i] = u;
            else {
                adjList[u].pb(mp(tree[i],0));
                adjList[tree[i]].pb(mp(u,0));
            }
        }
        return 0;
    }

    int mid = (s+e) / 2;
    update(s,mid,ai,2*i+1,u,t),update(mid+1,e,ai,2*i+2,u,t);
    if (t < tt[i]) {
        if (tree[i] == -1) tree[i] = u;
        else {
            adjList[u].pb(mp(tree[i],0));
            adjList[tree[i]].pb(mp(u,0));
        }
    }
    return 0;
}
int add(int s,int e,int qs,int qe,int i,int u) {
    if ((s > qe) || (e < qs)) return 0;
    else if ((s >= qs) && (e <= qe)) {
        if (tree[i] != -1) {
            adjList[u].pb(mp(tree[i],1));
            adjList[tree[i]].pb(mp(u,1));
        }
        return 0;
    }

    int mid = (s+e) / 2;
    add(s,mid,qs,qe,2*i+1,u),add(mid+1,e,qs,qe,2*i+2,u);
    return 0;
}
int colour[1000000],bad = 0;
int doDFS(int u,int c) {
    if (colour[u] != -1) {
        if (c != colour[u]) bad = 1;
        return 0;
    }
    int i;
    colour[u] = c;
    for (i = 0; i < adjList[u].size(); i++) doDFS(adjList[u][i].first,c^adjList[u][i].second);
    return 0;
}
set<int> a,b;
int main() {
    int i;
    int N;
    clock_t init = clock();
    scanf("%d",&N);
    for (i = 0; i < N; i++) scanf("%d %d",&A[i],&B[i]);

    for (i = 0; i < N; i++) order[i] = i;
    sort(order,order+N,comp);
    for (i = 0; i < N; i++) {
        int u = order[i];
        add2(0,2*N-1,A[u],B[u],0,i);
    }
    for (i = 0; i < N; i++) {
        int u = order[i];
        add(0,2*N-1,A[u],B[u],0,u);
        update(0,2*N-1,B[u],0,u,i);
        if ((double)(clock()-init)/CLOCKS_PER_SEC > 5.4) {
            printf("0\n");
            return 0;
        }
    }
    int c = 0;
    for (i = 0; i < N; i++) colour[i] = -1;
    for (i = 0; i < N; i++) {
        if (colour[i] == -1) doDFS(i,0),c++;
    }
    if (bad) printf("0\n");
    else {
        for (i = 0; i < N; i++) {
            int u = order[i];
            if (colour[u] == 0) {
                auto it = a.lower_bound(A[u]);
                if ((it != a.end()) && (*it <= B[u])) bad = 1;
                a.insert(B[u]);
            }
            else {
                auto it = b.lower_bound(A[u]);
                if ((it != b.end()) && (*it <= B[u])) bad = 1;
                b.insert(B[u]);
            }
            if (bad) break;

            if ((double)(clock()-init)/CLOCKS_PER_SEC > 5.4) {
                printf("0\n");
                return 0;
            }
        }
        if (bad) printf("0\n");
        else {
            int ans = 1;
            while (c--) ans = (2*ans) % 1000000007;
            printf("%d\n",ans);
        }
    }

    return 0;
}

Compilation message

port_facility.cpp: In function 'int doDFS(int, int)':
port_facility.cpp:122:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  122 |     for (i = 0; i < adjList[u].size(); i++) doDFS(adjList[u][i].first,c^adjList[u][i].second);
      |                 ~~^~~~~~~~~~~~~~~~~~~
port_facility.cpp: In function 'int main()':
port_facility.cpp:130:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  130 |     scanf("%d",&N);
      |     ~~~~~^~~~~~~~~
port_facility.cpp:131:34: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  131 |     for (i = 0; i < N; i++) scanf("%d %d",&A[i],&B[i]);
      |                             ~~~~~^~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 13 ms 23756 KB Output is correct
2 Correct 13 ms 23756 KB Output is correct
3 Correct 13 ms 23720 KB Output is correct
4 Correct 13 ms 23812 KB Output is correct
5 Correct 14 ms 23824 KB Output is correct
6 Correct 14 ms 23756 KB Output is correct
7 Correct 14 ms 23756 KB Output is correct
8 Correct 14 ms 23812 KB Output is correct
9 Correct 14 ms 23756 KB Output is correct
10 Correct 15 ms 23780 KB Output is correct
11 Correct 14 ms 23756 KB Output is correct
12 Correct 14 ms 23712 KB Output is correct
13 Correct 14 ms 23756 KB Output is correct
14 Correct 13 ms 23828 KB Output is correct
15 Correct 14 ms 23756 KB Output is correct
16 Correct 14 ms 23756 KB Output is correct
17 Correct 14 ms 23828 KB Output is correct
18 Correct 14 ms 23828 KB Output is correct
19 Correct 14 ms 23720 KB Output is correct
20 Correct 13 ms 23756 KB Output is correct
21 Correct 14 ms 23756 KB Output is correct
22 Correct 14 ms 23740 KB Output is correct
23 Correct 15 ms 23756 KB Output is correct
24 Correct 14 ms 23788 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 13 ms 23756 KB Output is correct
2 Correct 13 ms 23756 KB Output is correct
3 Correct 13 ms 23720 KB Output is correct
4 Correct 13 ms 23812 KB Output is correct
5 Correct 14 ms 23824 KB Output is correct
6 Correct 14 ms 23756 KB Output is correct
7 Correct 14 ms 23756 KB Output is correct
8 Correct 14 ms 23812 KB Output is correct
9 Correct 14 ms 23756 KB Output is correct
10 Correct 15 ms 23780 KB Output is correct
11 Correct 14 ms 23756 KB Output is correct
12 Correct 14 ms 23712 KB Output is correct
13 Correct 14 ms 23756 KB Output is correct
14 Correct 13 ms 23828 KB Output is correct
15 Correct 14 ms 23756 KB Output is correct
16 Correct 14 ms 23756 KB Output is correct
17 Correct 14 ms 23828 KB Output is correct
18 Correct 14 ms 23828 KB Output is correct
19 Correct 14 ms 23720 KB Output is correct
20 Correct 13 ms 23756 KB Output is correct
21 Correct 14 ms 23756 KB Output is correct
22 Correct 14 ms 23740 KB Output is correct
23 Correct 15 ms 23756 KB Output is correct
24 Correct 14 ms 23788 KB Output is correct
25 Correct 18 ms 24012 KB Output is correct
26 Correct 18 ms 24116 KB Output is correct
27 Correct 18 ms 24060 KB Output is correct
28 Correct 19 ms 24084 KB Output is correct
29 Correct 18 ms 24080 KB Output is correct
30 Correct 18 ms 24012 KB Output is correct
31 Correct 19 ms 24140 KB Output is correct
32 Correct 18 ms 24140 KB Output is correct
33 Correct 17 ms 23960 KB Output is correct
34 Correct 17 ms 24012 KB Output is correct
35 Correct 18 ms 24008 KB Output is correct
36 Correct 20 ms 24140 KB Output is correct
37 Correct 18 ms 24268 KB Output is correct
38 Correct 18 ms 24268 KB Output is correct
39 Correct 17 ms 24080 KB Output is correct
40 Correct 17 ms 23992 KB Output is correct
41 Correct 18 ms 24084 KB Output is correct
42 Correct 18 ms 24040 KB Output is correct
43 Correct 18 ms 24080 KB Output is correct
44 Correct 18 ms 24140 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 13 ms 23756 KB Output is correct
2 Correct 13 ms 23756 KB Output is correct
3 Correct 13 ms 23720 KB Output is correct
4 Correct 13 ms 23812 KB Output is correct
5 Correct 14 ms 23824 KB Output is correct
6 Correct 14 ms 23756 KB Output is correct
7 Correct 14 ms 23756 KB Output is correct
8 Correct 14 ms 23812 KB Output is correct
9 Correct 14 ms 23756 KB Output is correct
10 Correct 15 ms 23780 KB Output is correct
11 Correct 14 ms 23756 KB Output is correct
12 Correct 14 ms 23712 KB Output is correct
13 Correct 14 ms 23756 KB Output is correct
14 Correct 13 ms 23828 KB Output is correct
15 Correct 14 ms 23756 KB Output is correct
16 Correct 14 ms 23756 KB Output is correct
17 Correct 14 ms 23828 KB Output is correct
18 Correct 14 ms 23828 KB Output is correct
19 Correct 14 ms 23720 KB Output is correct
20 Correct 13 ms 23756 KB Output is correct
21 Correct 14 ms 23756 KB Output is correct
22 Correct 14 ms 23740 KB Output is correct
23 Correct 15 ms 23756 KB Output is correct
24 Correct 14 ms 23788 KB Output is correct
25 Correct 18 ms 24012 KB Output is correct
26 Correct 18 ms 24116 KB Output is correct
27 Correct 18 ms 24060 KB Output is correct
28 Correct 19 ms 24084 KB Output is correct
29 Correct 18 ms 24080 KB Output is correct
30 Correct 18 ms 24012 KB Output is correct
31 Correct 19 ms 24140 KB Output is correct
32 Correct 18 ms 24140 KB Output is correct
33 Correct 17 ms 23960 KB Output is correct
34 Correct 17 ms 24012 KB Output is correct
35 Correct 18 ms 24008 KB Output is correct
36 Correct 20 ms 24140 KB Output is correct
37 Correct 18 ms 24268 KB Output is correct
38 Correct 18 ms 24268 KB Output is correct
39 Correct 17 ms 24080 KB Output is correct
40 Correct 17 ms 23992 KB Output is correct
41 Correct 18 ms 24084 KB Output is correct
42 Correct 18 ms 24040 KB Output is correct
43 Correct 18 ms 24080 KB Output is correct
44 Correct 18 ms 24140 KB Output is correct
45 Correct 310 ms 40416 KB Output is correct
46 Correct 300 ms 41444 KB Output is correct
47 Correct 295 ms 39876 KB Output is correct
48 Correct 306 ms 41456 KB Output is correct
49 Correct 304 ms 40244 KB Output is correct
50 Correct 238 ms 36928 KB Output is correct
51 Correct 232 ms 36684 KB Output is correct
52 Correct 234 ms 33468 KB Output is correct
53 Correct 275 ms 34372 KB Output is correct
54 Correct 323 ms 66704 KB Output is correct
55 Correct 311 ms 57904 KB Output is correct
56 Correct 306 ms 57912 KB Output is correct
57 Correct 256 ms 36932 KB Output is correct
58 Correct 245 ms 33892 KB Output is correct
59 Correct 260 ms 34884 KB Output is correct
60 Correct 268 ms 36480 KB Output is correct
61 Correct 284 ms 37952 KB Output is correct
62 Correct 203 ms 31580 KB Output is correct
63 Correct 213 ms 32408 KB Output is correct
64 Correct 218 ms 33476 KB Output is correct
65 Correct 446 ms 75988 KB Output is correct
66 Correct 456 ms 76096 KB Output is correct
67 Correct 343 ms 51444 KB Output is correct
68 Correct 353 ms 51036 KB Output is correct
69 Correct 352 ms 50896 KB Output is correct
70 Correct 358 ms 51000 KB Output is correct
71 Correct 291 ms 38704 KB Output is correct
72 Correct 304 ms 39216 KB Output is correct
73 Correct 297 ms 39728 KB Output is correct
74 Correct 301 ms 39728 KB Output is correct
75 Correct 262 ms 39824 KB Output is correct
76 Correct 261 ms 41792 KB Output is correct
77 Correct 204 ms 37028 KB Output is correct
78 Correct 305 ms 41340 KB Output is correct
79 Correct 301 ms 40644 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 13 ms 23756 KB Output is correct
2 Correct 13 ms 23756 KB Output is correct
3 Correct 13 ms 23720 KB Output is correct
4 Correct 13 ms 23812 KB Output is correct
5 Correct 14 ms 23824 KB Output is correct
6 Correct 14 ms 23756 KB Output is correct
7 Correct 14 ms 23756 KB Output is correct
8 Correct 14 ms 23812 KB Output is correct
9 Correct 14 ms 23756 KB Output is correct
10 Correct 15 ms 23780 KB Output is correct
11 Correct 14 ms 23756 KB Output is correct
12 Correct 14 ms 23712 KB Output is correct
13 Correct 14 ms 23756 KB Output is correct
14 Correct 13 ms 23828 KB Output is correct
15 Correct 14 ms 23756 KB Output is correct
16 Correct 14 ms 23756 KB Output is correct
17 Correct 14 ms 23828 KB Output is correct
18 Correct 14 ms 23828 KB Output is correct
19 Correct 14 ms 23720 KB Output is correct
20 Correct 13 ms 23756 KB Output is correct
21 Correct 14 ms 23756 KB Output is correct
22 Correct 14 ms 23740 KB Output is correct
23 Correct 15 ms 23756 KB Output is correct
24 Correct 14 ms 23788 KB Output is correct
25 Correct 18 ms 24012 KB Output is correct
26 Correct 18 ms 24116 KB Output is correct
27 Correct 18 ms 24060 KB Output is correct
28 Correct 19 ms 24084 KB Output is correct
29 Correct 18 ms 24080 KB Output is correct
30 Correct 18 ms 24012 KB Output is correct
31 Correct 19 ms 24140 KB Output is correct
32 Correct 18 ms 24140 KB Output is correct
33 Correct 17 ms 23960 KB Output is correct
34 Correct 17 ms 24012 KB Output is correct
35 Correct 18 ms 24008 KB Output is correct
36 Correct 20 ms 24140 KB Output is correct
37 Correct 18 ms 24268 KB Output is correct
38 Correct 18 ms 24268 KB Output is correct
39 Correct 17 ms 24080 KB Output is correct
40 Correct 17 ms 23992 KB Output is correct
41 Correct 18 ms 24084 KB Output is correct
42 Correct 18 ms 24040 KB Output is correct
43 Correct 18 ms 24080 KB Output is correct
44 Correct 18 ms 24140 KB Output is correct
45 Correct 310 ms 40416 KB Output is correct
46 Correct 300 ms 41444 KB Output is correct
47 Correct 295 ms 39876 KB Output is correct
48 Correct 306 ms 41456 KB Output is correct
49 Correct 304 ms 40244 KB Output is correct
50 Correct 238 ms 36928 KB Output is correct
51 Correct 232 ms 36684 KB Output is correct
52 Correct 234 ms 33468 KB Output is correct
53 Correct 275 ms 34372 KB Output is correct
54 Correct 323 ms 66704 KB Output is correct
55 Correct 311 ms 57904 KB Output is correct
56 Correct 306 ms 57912 KB Output is correct
57 Correct 256 ms 36932 KB Output is correct
58 Correct 245 ms 33892 KB Output is correct
59 Correct 260 ms 34884 KB Output is correct
60 Correct 268 ms 36480 KB Output is correct
61 Correct 284 ms 37952 KB Output is correct
62 Correct 203 ms 31580 KB Output is correct
63 Correct 213 ms 32408 KB Output is correct
64 Correct 218 ms 33476 KB Output is correct
65 Correct 446 ms 75988 KB Output is correct
66 Correct 456 ms 76096 KB Output is correct
67 Correct 343 ms 51444 KB Output is correct
68 Correct 353 ms 51036 KB Output is correct
69 Correct 352 ms 50896 KB Output is correct
70 Correct 358 ms 51000 KB Output is correct
71 Correct 291 ms 38704 KB Output is correct
72 Correct 304 ms 39216 KB Output is correct
73 Correct 297 ms 39728 KB Output is correct
74 Correct 301 ms 39728 KB Output is correct
75 Correct 262 ms 39824 KB Output is correct
76 Correct 261 ms 41792 KB Output is correct
77 Correct 204 ms 37028 KB Output is correct
78 Correct 305 ms 41340 KB Output is correct
79 Correct 301 ms 40644 KB Output is correct
80 Correct 3688 ms 188408 KB Output is correct
81 Correct 3611 ms 186856 KB Output is correct
82 Correct 3591 ms 175872 KB Output is correct
83 Correct 3654 ms 186984 KB Output is correct
84 Correct 3634 ms 187892 KB Output is correct
85 Correct 2890 ms 135988 KB Output is correct
86 Correct 2919 ms 142616 KB Output is correct
87 Correct 2767 ms 111352 KB Output is correct
88 Correct 3300 ms 119624 KB Output is correct
89 Correct 3997 ms 497740 KB Output is correct
90 Correct 3935 ms 487980 KB Output is correct
91 Correct 3926 ms 487944 KB Output is correct
92 Correct 3304 ms 146752 KB Output is correct
93 Correct 2858 ms 115464 KB Output is correct
94 Correct 3137 ms 131328 KB Output is correct
95 Correct 3387 ms 150256 KB Output is correct
96 Correct 3444 ms 165188 KB Output is correct
97 Correct 2326 ms 91332 KB Output is correct
98 Correct 2553 ms 106820 KB Output is correct
99 Correct 2725 ms 127504 KB Output is correct
100 Correct 5696 ms 573568 KB Output is correct
101 Correct 5687 ms 582264 KB Output is correct
102 Correct 4314 ms 327992 KB Output is correct
103 Correct 4390 ms 336784 KB Output is correct
104 Correct 4303 ms 329212 KB Output is correct
105 Correct 4309 ms 329152 KB Output is correct
106 Correct 3718 ms 177072 KB Output is correct
107 Correct 3687 ms 180756 KB Output is correct
108 Correct 3738 ms 187420 KB Output is correct
109 Correct 3716 ms 187416 KB Output is correct
110 Correct 3271 ms 207052 KB Output is correct
111 Correct 3298 ms 208096 KB Output is correct
112 Correct 2441 ms 161116 KB Output is correct
113 Correct 3584 ms 191120 KB Output is correct
114 Correct 3645 ms 201028 KB Output is correct