Submission #228838

# Submission time Handle Problem Language Result Execution time Memory
228838 2020-05-02T19:01:26 Z rqi Port Facility (JOI17_port_facility) C++14
100 / 100
1061 ms 187224 KB
#include <bits/stdc++.h>
using namespace std;
 
typedef long long ll;
typedef long double ld;
typedef double db; 
typedef string str; 

typedef pair<int,int> pi;
typedef pair<ll,ll> pl; 
typedef pair<db,db> pd; 

typedef vector<int> vi; 
typedef vector<ll> vl; 
typedef vector<db> vd; 
typedef vector<str> vs; 
typedef vector<pi> vpi;
typedef vector<pl> vpl; 
typedef vector<pd> vpd; 

#define mp make_pair 
#define f first
#define s second
#define sz(x) (int)x.size()
#define all(x) begin(x), end(x)
#define rall(x) (x).rbegin(), (x).rend() 
#define rsz resize
#define ins insert 
#define ft front() 
#define bk back()
#define pf push_front 
#define pb push_back
#define eb emplace_back 
#define lb lower_bound 
#define ub upper_bound 

#define FOR(i,a,b) for (int i = (a); i < (b); ++i)
#define F0R(i,a) FOR(i,0,a)
#define ROF(i,a,b) for (int i = (b)-1; i >= (a); --i)
#define R0F(i,a) ROF(i,0,a)
#define trav(a,x) for (auto& a: x)

const int MOD = 1e9+7; // 998244353;
const int MX = 2e5+5; 
const ll INF = 1e18; 
const ld PI = acos((ld)-1);
const int xd[4] = {1,0,-1,0}, yd[4] = {0,1,0,-1}; 

template<class T> bool ckmin(T& a, const T& b) { 
    return b < a ? a = b, 1 : 0; }
template<class T> bool ckmax(T& a, const T& b) { 
    return a < b ? a = b, 1 : 0; } 
int pct(int x) { return __builtin_popcount(x); } 
int bit(int x) { return 31-__builtin_clz(x); } // floor(log2(x)) 
int cdiv(int a, int b) { return a/b+!(a<0||a%b == 0); } // division of a by b rounded up, assumes b > 0 

// INPUT
template<class A> void re(complex<A>& c);
template<class A, class B> void re(pair<A,B>& p);
template<class A> void re(vector<A>& v);
template<class A, size_t SZ> void re(array<A,SZ>& a);

template<class T> void re(T& x) { cin >> x; }
void re(db& d) { str t; re(t); d = stod(t); }
void re(ld& d) { str t; re(t); d = stold(t); }
template<class H, class... T> void re(H& h, T&... t) { re(h); re(t...); }

template<class A> void re(complex<A>& c) { A a,b; re(a,b); c = {a,b}; }
template<class A, class B> void re(pair<A,B>& p) { re(p.f,p.s); }
template<class A> void re(vector<A>& x) { trav(a,x) re(a); }
template<class A, size_t SZ> void re(array<A,SZ>& x) { trav(a,x) re(a); }

// TO_STRING
#define ts to_string
template<class A, class B> str ts(pair<A,B> p);
template<class A> str ts(complex<A> c) { return ts(mp(c.real(),c.imag())); }
str ts(bool b) { return b ? "true" : "false"; }
str ts(char c) { str s = ""; s += c; return s; }
str ts(str s) { return s; }
str ts(const char* s) { return (str)s; }
str ts(vector<bool> v) { 
    bool fst = 1; str res = "{";
    F0R(i,sz(v)) {
        if (!fst) res += ", ";
        fst = 0; res += ts(v[i]);
    }
    res += "}"; return res;
}
template<size_t SZ> str ts(bitset<SZ> b) {
    str res = ""; F0R(i,SZ) res += char('0'+b[i]);
    return res; }
template<class T> str ts(T v) {
    bool fst = 1; str res = "{";
    for (const auto& x: v) {
        if (!fst) res += ", ";
        fst = 0; res += ts(x);
    }
    res += "}"; return res;
}
template<class A, class B> str ts(pair<A,B> p) {
    return "("+ts(p.f)+", "+ts(p.s)+")"; }

// OUTPUT
template<class A> void pr(A x) { cout << ts(x); }
template<class H, class... T> void pr(const H& h, const T&... t) { 
    pr(h); pr(t...); }
void ps() { pr("\n"); } // print w/ spaces
template<class H, class... T> void ps(const H& h, const T&... t) { 
    pr(h); if (sizeof...(t)) pr(" "); ps(t...); }

// DEBUG
void DBG() { cerr << "]" << endl; }
template<class H, class... T> void DBG(H h, T... t) {
    cerr << to_string(h); if (sizeof...(t)) cerr << ", ";
    DBG(t...); }
#ifdef LOCAL // compile with -DLOCAL
#define dbg(...) cerr << "[" << #__VA_ARGS__ << "]: [", DBG(__VA_ARGS__)
#else
#define dbg(...) 42
#endif

// FILE I/O
void setIn(string s) { freopen(s.c_str(),"r",stdin); }
void setOut(string s) { freopen(s.c_str(),"w",stdout); }
void unsyncIO() { ios_base::sync_with_stdio(0); cin.tie(0); }
void setIO(string s = "") {
    unsyncIO();
    // cin.exceptions(cin.failbit); 
    // throws exception when do smth illegal
    // ex. try to read letter into int
    if (sz(s)) { setIn(s+".in"), setOut(s+".out"); } // for USACO
}

mt19937 rng((uint32_t)chrono::steady_clock::now().time_since_epoch().count()); 


const int mx = 1000005;
int N;
int A[mx];
int B[mx];
int val[mx];
vi adj[mx];
priority_queue<pi, vector<pi>, greater<pi>> Bvals[mx];
priority_queue<pi, vector<pi>, greater<pi>> minBvals;

/**
 * Description: Disjoint Set Union with path compression. 
     * Add edges and test connectivity. Use for Kruskal's 
     * minimum spanning tree.
 * Time: O(\alpha(N))
 * Source: CSAcademy, KACTL
 * Verification: USACO superbull
 */

struct DSU {
    vi e; void init(int n) { e = vi(n,-1); }
    int get(int x) { return e[x] < 0 ? x : e[x] = get(e[x]); } 
    bool sameSet(int a, int b) { return get(a) == get(b); }
    int size(int x) { return -e[get(x)]; }
    bool unite(int x, int y) { // union-by-rank
        x = get(x), y = get(y); if (x == y) return 0;
        if (e[x] > e[y]) swap(x,y);
        e[x] += e[y]; e[y] = x; return 1;
    }
};


DSU dsu;

/**template<class T> T kruskal(int n, vector<pair<T,pi>> ed) {
    sort(all(ed));
    T ans = 0; DSU D; D.init(n+1); // edges that unite are in MST
    trav(a,ed) if (D.unite(a.s.f,a.s.s)) ans += a.f; 
    return ans;
}*/





void addEdge(int a, int b){
    adj[a].pb(b);
    adj[b].pb(a);
    dsu.unite(a, b);
    //dbg(a, b);
}

void search(int node, int c){
    if(val[node] != 2){
        return;
    }
    val[node] = c;
    for(auto u: adj[node]){
        search(u, 1-c);
    }
}

void genPrelim(){
    for(int i = 1; i <= N; i++){
        val[i] = 2;
    }
    for(int i = 1; i <= N; i++){
        if(val[i] != 2) continue;
        search(i, 0);
    }
}

int main() {
    setIO();
    
    cin >> N;
    dsu.init(N+5);
    vpi inters;
    for(int i = 1; i <= N; i++){
        int a, b;
        cin >> a >> b;
        inters.pb(mp(a, b));
    }
    sort(all(inters));
    for(int i = 1; i <= N; i++){
        A[i] = inters[i-1].f;
        B[i] = inters[i-1].s;
    }

    for(int i = 1; i <= N; i++){
        //first, remove all unnecessary values from the front
        while(sz(minBvals)){
            pi a = minBvals.top();
            if(a.f > A[i]){
                //all work
                break;
            }
            minBvals.pop();
            Bvals[a.s].pop();
            if(sz(Bvals[a.s])){
                minBvals.push(mp(Bvals[a.s].top().f, a.s));
            }
        }
        //next, find out all components that need to be merged    
        vi conec; //components you will need to unite to
        while(sz(minBvals)){
            pi a = minBvals.top();
            if(a.f > B[i]) break;
            minBvals.pop();
            int intind = Bvals[a.s].top().s;
            addEdge(i, intind);
            conec.pb(a.s);
        }   
        
        //insert B[i]
        
        Bvals[i].push(mp(B[i], i));
        conec.pb(i);
        //merge the components in conec
        int comp = i;
        for(auto u: conec){
            if(sz(Bvals[u]) > sz(Bvals[comp])) comp = u;
        }
        for(auto u: conec){
            if(u == comp) continue;
            while(sz(Bvals[u])){
                pi a = Bvals[u].top();
                Bvals[u].pop();
                Bvals[comp].push(a);
            }
        }
        //edit minbvals
        minBvals.push(mp(Bvals[comp].top().f, comp));  
    }

    genPrelim(); //assigns 0 or 1 to each interval
    /*for(int i = 1; i <= N; i++){
        ps(val[i]);
    }*/
    priority_queue<int, vector<int>, greater<int>> q[2]; //0/1, position of B
    for(int i = 1; i <= N; i++){
        //remove unnecessary stuff
        while(sz(q[val[i]])){
            int pos = q[val[i]].top();
            if(pos > A[i]) break;
            q[val[i]].pop();
        }
        //test if it contradicts
        if(sz(q[val[i]])){
            int pos = q[val[i]].top();
            if(pos < B[i]){
                ps(0);
                return 0;
            }
        }
        //add to the right queue
        q[val[i]].push(B[i]);
    }
    ll ans = 1;
    for(int i = 1; i <= N; i++){
        if(dsu.e[i] < 0){
            ans = (ans*2) % MOD;
        }
    }
    ps(ans);
    // you should actually read the stuff at the bottom
}

/* stuff you should look for
    * int overflow, array bounds
    * special cases (n=1?)
    * do smth instead of nothing and stay organized
    * WRITE STUFF DOWN
*/

Compilation message

port_facility.cpp: In function 'void setIn(std::__cxx11::string)':
port_facility.cpp:123:31: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
 void setIn(string s) { freopen(s.c_str(),"r",stdin); }
                        ~~~~~~~^~~~~~~~~~~~~~~~~~~~~
port_facility.cpp: In function 'void setOut(std::__cxx11::string)':
port_facility.cpp:124:32: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
 void setOut(string s) { freopen(s.c_str(),"w",stdout); }
                         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 36 ms 55160 KB Output is correct
2 Correct 36 ms 55164 KB Output is correct
3 Correct 35 ms 55160 KB Output is correct
4 Correct 39 ms 55160 KB Output is correct
5 Correct 35 ms 55160 KB Output is correct
6 Correct 36 ms 55160 KB Output is correct
7 Correct 35 ms 55168 KB Output is correct
8 Correct 35 ms 55160 KB Output is correct
9 Correct 35 ms 55168 KB Output is correct
10 Correct 36 ms 55168 KB Output is correct
11 Correct 38 ms 55168 KB Output is correct
12 Correct 35 ms 55168 KB Output is correct
13 Correct 35 ms 55168 KB Output is correct
14 Correct 35 ms 55168 KB Output is correct
15 Correct 35 ms 55160 KB Output is correct
16 Correct 36 ms 55160 KB Output is correct
17 Correct 36 ms 55160 KB Output is correct
18 Correct 36 ms 55168 KB Output is correct
19 Correct 36 ms 55160 KB Output is correct
20 Correct 43 ms 55160 KB Output is correct
21 Correct 36 ms 55168 KB Output is correct
22 Correct 36 ms 55168 KB Output is correct
23 Correct 35 ms 55168 KB Output is correct
24 Correct 36 ms 55168 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 36 ms 55160 KB Output is correct
2 Correct 36 ms 55164 KB Output is correct
3 Correct 35 ms 55160 KB Output is correct
4 Correct 39 ms 55160 KB Output is correct
5 Correct 35 ms 55160 KB Output is correct
6 Correct 36 ms 55160 KB Output is correct
7 Correct 35 ms 55168 KB Output is correct
8 Correct 35 ms 55160 KB Output is correct
9 Correct 35 ms 55168 KB Output is correct
10 Correct 36 ms 55168 KB Output is correct
11 Correct 38 ms 55168 KB Output is correct
12 Correct 35 ms 55168 KB Output is correct
13 Correct 35 ms 55168 KB Output is correct
14 Correct 35 ms 55168 KB Output is correct
15 Correct 35 ms 55160 KB Output is correct
16 Correct 36 ms 55160 KB Output is correct
17 Correct 36 ms 55160 KB Output is correct
18 Correct 36 ms 55168 KB Output is correct
19 Correct 36 ms 55160 KB Output is correct
20 Correct 43 ms 55160 KB Output is correct
21 Correct 36 ms 55168 KB Output is correct
22 Correct 36 ms 55168 KB Output is correct
23 Correct 35 ms 55168 KB Output is correct
24 Correct 36 ms 55168 KB Output is correct
25 Correct 36 ms 55296 KB Output is correct
26 Correct 38 ms 55288 KB Output is correct
27 Correct 39 ms 55296 KB Output is correct
28 Correct 37 ms 55296 KB Output is correct
29 Correct 38 ms 55288 KB Output is correct
30 Correct 37 ms 55296 KB Output is correct
31 Correct 38 ms 55288 KB Output is correct
32 Correct 38 ms 55296 KB Output is correct
33 Correct 37 ms 55296 KB Output is correct
34 Correct 36 ms 55288 KB Output is correct
35 Correct 36 ms 55296 KB Output is correct
36 Correct 36 ms 55288 KB Output is correct
37 Correct 36 ms 55416 KB Output is correct
38 Correct 36 ms 55296 KB Output is correct
39 Correct 36 ms 55296 KB Output is correct
40 Correct 36 ms 55296 KB Output is correct
41 Correct 37 ms 55424 KB Output is correct
42 Correct 37 ms 55424 KB Output is correct
43 Correct 38 ms 55424 KB Output is correct
44 Correct 36 ms 55424 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 36 ms 55160 KB Output is correct
2 Correct 36 ms 55164 KB Output is correct
3 Correct 35 ms 55160 KB Output is correct
4 Correct 39 ms 55160 KB Output is correct
5 Correct 35 ms 55160 KB Output is correct
6 Correct 36 ms 55160 KB Output is correct
7 Correct 35 ms 55168 KB Output is correct
8 Correct 35 ms 55160 KB Output is correct
9 Correct 35 ms 55168 KB Output is correct
10 Correct 36 ms 55168 KB Output is correct
11 Correct 38 ms 55168 KB Output is correct
12 Correct 35 ms 55168 KB Output is correct
13 Correct 35 ms 55168 KB Output is correct
14 Correct 35 ms 55168 KB Output is correct
15 Correct 35 ms 55160 KB Output is correct
16 Correct 36 ms 55160 KB Output is correct
17 Correct 36 ms 55160 KB Output is correct
18 Correct 36 ms 55168 KB Output is correct
19 Correct 36 ms 55160 KB Output is correct
20 Correct 43 ms 55160 KB Output is correct
21 Correct 36 ms 55168 KB Output is correct
22 Correct 36 ms 55168 KB Output is correct
23 Correct 35 ms 55168 KB Output is correct
24 Correct 36 ms 55168 KB Output is correct
25 Correct 36 ms 55296 KB Output is correct
26 Correct 38 ms 55288 KB Output is correct
27 Correct 39 ms 55296 KB Output is correct
28 Correct 37 ms 55296 KB Output is correct
29 Correct 38 ms 55288 KB Output is correct
30 Correct 37 ms 55296 KB Output is correct
31 Correct 38 ms 55288 KB Output is correct
32 Correct 38 ms 55296 KB Output is correct
33 Correct 37 ms 55296 KB Output is correct
34 Correct 36 ms 55288 KB Output is correct
35 Correct 36 ms 55296 KB Output is correct
36 Correct 36 ms 55288 KB Output is correct
37 Correct 36 ms 55416 KB Output is correct
38 Correct 36 ms 55296 KB Output is correct
39 Correct 36 ms 55296 KB Output is correct
40 Correct 36 ms 55296 KB Output is correct
41 Correct 37 ms 55424 KB Output is correct
42 Correct 37 ms 55424 KB Output is correct
43 Correct 38 ms 55424 KB Output is correct
44 Correct 36 ms 55424 KB Output is correct
45 Correct 127 ms 64296 KB Output is correct
46 Correct 126 ms 64496 KB Output is correct
47 Correct 128 ms 64236 KB Output is correct
48 Correct 130 ms 64496 KB Output is correct
49 Correct 132 ms 64368 KB Output is correct
50 Correct 126 ms 64228 KB Output is correct
51 Correct 125 ms 64368 KB Output is correct
52 Correct 82 ms 60656 KB Output is correct
53 Correct 86 ms 62320 KB Output is correct
54 Correct 95 ms 65008 KB Output is correct
55 Correct 98 ms 65140 KB Output is correct
56 Correct 99 ms 65136 KB Output is correct
57 Correct 97 ms 63728 KB Output is correct
58 Correct 84 ms 60656 KB Output is correct
59 Correct 104 ms 61680 KB Output is correct
60 Correct 123 ms 63216 KB Output is correct
61 Correct 131 ms 63856 KB Output is correct
62 Correct 102 ms 62320 KB Output is correct
63 Correct 111 ms 63088 KB Output is correct
64 Correct 120 ms 63724 KB Output is correct
65 Correct 115 ms 64496 KB Output is correct
66 Correct 114 ms 64496 KB Output is correct
67 Correct 108 ms 65520 KB Output is correct
68 Correct 114 ms 66796 KB Output is correct
69 Correct 116 ms 67184 KB Output is correct
70 Correct 112 ms 67184 KB Output is correct
71 Correct 103 ms 67312 KB Output is correct
72 Correct 101 ms 67312 KB Output is correct
73 Correct 108 ms 67440 KB Output is correct
74 Correct 104 ms 67440 KB Output is correct
75 Correct 111 ms 68200 KB Output is correct
76 Correct 105 ms 68208 KB Output is correct
77 Correct 104 ms 68208 KB Output is correct
78 Correct 130 ms 65740 KB Output is correct
79 Correct 133 ms 65648 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 36 ms 55160 KB Output is correct
2 Correct 36 ms 55164 KB Output is correct
3 Correct 35 ms 55160 KB Output is correct
4 Correct 39 ms 55160 KB Output is correct
5 Correct 35 ms 55160 KB Output is correct
6 Correct 36 ms 55160 KB Output is correct
7 Correct 35 ms 55168 KB Output is correct
8 Correct 35 ms 55160 KB Output is correct
9 Correct 35 ms 55168 KB Output is correct
10 Correct 36 ms 55168 KB Output is correct
11 Correct 38 ms 55168 KB Output is correct
12 Correct 35 ms 55168 KB Output is correct
13 Correct 35 ms 55168 KB Output is correct
14 Correct 35 ms 55168 KB Output is correct
15 Correct 35 ms 55160 KB Output is correct
16 Correct 36 ms 55160 KB Output is correct
17 Correct 36 ms 55160 KB Output is correct
18 Correct 36 ms 55168 KB Output is correct
19 Correct 36 ms 55160 KB Output is correct
20 Correct 43 ms 55160 KB Output is correct
21 Correct 36 ms 55168 KB Output is correct
22 Correct 36 ms 55168 KB Output is correct
23 Correct 35 ms 55168 KB Output is correct
24 Correct 36 ms 55168 KB Output is correct
25 Correct 36 ms 55296 KB Output is correct
26 Correct 38 ms 55288 KB Output is correct
27 Correct 39 ms 55296 KB Output is correct
28 Correct 37 ms 55296 KB Output is correct
29 Correct 38 ms 55288 KB Output is correct
30 Correct 37 ms 55296 KB Output is correct
31 Correct 38 ms 55288 KB Output is correct
32 Correct 38 ms 55296 KB Output is correct
33 Correct 37 ms 55296 KB Output is correct
34 Correct 36 ms 55288 KB Output is correct
35 Correct 36 ms 55296 KB Output is correct
36 Correct 36 ms 55288 KB Output is correct
37 Correct 36 ms 55416 KB Output is correct
38 Correct 36 ms 55296 KB Output is correct
39 Correct 36 ms 55296 KB Output is correct
40 Correct 36 ms 55296 KB Output is correct
41 Correct 37 ms 55424 KB Output is correct
42 Correct 37 ms 55424 KB Output is correct
43 Correct 38 ms 55424 KB Output is correct
44 Correct 36 ms 55424 KB Output is correct
45 Correct 127 ms 64296 KB Output is correct
46 Correct 126 ms 64496 KB Output is correct
47 Correct 128 ms 64236 KB Output is correct
48 Correct 130 ms 64496 KB Output is correct
49 Correct 132 ms 64368 KB Output is correct
50 Correct 126 ms 64228 KB Output is correct
51 Correct 125 ms 64368 KB Output is correct
52 Correct 82 ms 60656 KB Output is correct
53 Correct 86 ms 62320 KB Output is correct
54 Correct 95 ms 65008 KB Output is correct
55 Correct 98 ms 65140 KB Output is correct
56 Correct 99 ms 65136 KB Output is correct
57 Correct 97 ms 63728 KB Output is correct
58 Correct 84 ms 60656 KB Output is correct
59 Correct 104 ms 61680 KB Output is correct
60 Correct 123 ms 63216 KB Output is correct
61 Correct 131 ms 63856 KB Output is correct
62 Correct 102 ms 62320 KB Output is correct
63 Correct 111 ms 63088 KB Output is correct
64 Correct 120 ms 63724 KB Output is correct
65 Correct 115 ms 64496 KB Output is correct
66 Correct 114 ms 64496 KB Output is correct
67 Correct 108 ms 65520 KB Output is correct
68 Correct 114 ms 66796 KB Output is correct
69 Correct 116 ms 67184 KB Output is correct
70 Correct 112 ms 67184 KB Output is correct
71 Correct 103 ms 67312 KB Output is correct
72 Correct 101 ms 67312 KB Output is correct
73 Correct 108 ms 67440 KB Output is correct
74 Correct 104 ms 67440 KB Output is correct
75 Correct 111 ms 68200 KB Output is correct
76 Correct 105 ms 68208 KB Output is correct
77 Correct 104 ms 68208 KB Output is correct
78 Correct 130 ms 65740 KB Output is correct
79 Correct 133 ms 65648 KB Output is correct
80 Correct 1028 ms 159064 KB Output is correct
81 Correct 1061 ms 159156 KB Output is correct
82 Correct 1048 ms 159428 KB Output is correct
83 Correct 1056 ms 159116 KB Output is correct
84 Correct 1004 ms 159572 KB Output is correct
85 Correct 963 ms 158680 KB Output is correct
86 Correct 985 ms 158808 KB Output is correct
87 Correct 517 ms 124504 KB Output is correct
88 Correct 612 ms 140376 KB Output is correct
89 Correct 690 ms 167888 KB Output is correct
90 Correct 728 ms 167772 KB Output is correct
91 Correct 722 ms 168032 KB Output is correct
92 Correct 653 ms 155900 KB Output is correct
93 Correct 551 ms 124664 KB Output is correct
94 Correct 854 ms 141312 KB Output is correct
95 Correct 1002 ms 156204 KB Output is correct
96 Correct 1024 ms 158992 KB Output is correct
97 Correct 805 ms 143728 KB Output is correct
98 Correct 944 ms 154844 KB Output is correct
99 Correct 947 ms 155784 KB Output is correct
100 Correct 1024 ms 162392 KB Output is correct
101 Correct 1027 ms 162568 KB Output is correct
102 Correct 861 ms 172120 KB Output is correct
103 Correct 820 ms 172124 KB Output is correct
104 Correct 835 ms 174680 KB Output is correct
105 Correct 795 ms 174664 KB Output is correct
106 Correct 721 ms 177476 KB Output is correct
107 Correct 746 ms 177492 KB Output is correct
108 Correct 729 ms 178136 KB Output is correct
109 Correct 737 ms 178208 KB Output is correct
110 Correct 787 ms 187224 KB Output is correct
111 Correct 754 ms 187096 KB Output is correct
112 Correct 781 ms 187096 KB Output is correct
113 Correct 1037 ms 158816 KB Output is correct
114 Correct 1024 ms 158936 KB Output is correct