QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#599573#9427. Collect the Coinsucup-team2000#TL 933ms67032kbC++233.0kb2024-09-29 06:49:182024-09-29 06:49:18

Judging History

你现在查看的是最新测评结果

  • [2024-11-06 15:56:27]
  • hack成功,自动添加数据
  • (/hack/1139)
  • [2024-09-29 06:49:18]
  • 评测
  • 测评结果:TL
  • 用时:933ms
  • 内存:67032kb
  • [2024-09-29 06:49:18]
  • 提交

answer

#include<bits/stdc++.h>
#pragma GCC optimize(3,"Ofast","inline")
// #pragma GCC target("avx2","sse2","fma")

using namespace std;

using ll = long long;

const int maxn = 1e6+100;

ll n;
pair<ll, ll>vec[maxn];
set<pair<ll, ll>>all;

bool check(ll V) {
    static bool dp[maxn];
    fill(dp, dp + n + 1, 0);
    all.clear();

    auto valid = [&](ll i, ll j) {
        auto [t1, p1] = vec[i];
        auto [t2, p2] = vec[j];
        return abs(p1-p2)<=abs(t1-t2)*V;
    };

    auto insert = [&](ll pos) {
        auto [t, p] = vec[pos];
        // insert (p - tV, -p-tV)
        // ...
        auto x = p - t*V;
        auto y = -p - t*V;
        
        bool flag = true;
        if(all.size()) {
            auto rit = all.lower_bound({x, y});
            if(rit==all.end()) flag = true;
            else {
                auto [tx, ty] = *rit;
                if(ty<y) flag = true;
                else flag = false;
            }
        }
        if(flag) {
            auto it = all.upper_bound({x, y});
            while(it != all.begin()) {
                auto pit = prev(it, 1);
                auto [tx, ty] = *pit;
                if(ty<=y) all.erase(pit);
                else break;
            }
            all.insert({x, y});
        }
    };
    for(int i = 2 ; i < n ; i ++) {
        if(!valid(i-1, i)) break;
        dp[i+1] = true;
    }
    // check st = 2, i = 3?
    dp[2] = true;
    for(ll i = 3 ; i <= n ; i ++) {
        if(!valid(i-2, i-1)) {
            all.clear();
        }
        //cout << "addr2" << endl;
        if(dp[i-1]) insert(i-2);
        // j-1
        auto [qt, qp] = vec[i];
        auto qx = qp - qt * V;
        auto qy = -qp - qt * V;
        auto it = all.lower_bound({qx, qy});
        if(it!=all.end()) {
            auto [tx, ty] = *it;
            if(ty>=qy) dp[i] = true;
        }
        //cout << "addr3" << endl;
        //cout << i << ' ' << dp[i] << endl;
    }
    // cout << V << endl;
    // exit(0);
    for(int temp = n ; temp >= 1 ; temp --) {
        if(temp<n and !valid(temp, temp+1)) break;
        if(dp[temp]) return true;
    }
    return false;
};  

void solve() {
    cin >> n; 
    // n = 1000000;
    for(ll i = 1 ; i <= n ; i ++) {
        cin >> vec[i].first >> vec[i].second;
        // vec[i].first = i;
        // vec[i].second = i;
    }
    set<ll>all_pos;
    for(ll i = 1 ; i <= n ; i ++) {
        all_pos.insert(vec[i].second);
    }
    if(all_pos.size()<=2) {
        cout << 0 << '\n';
        return;
    }
    //cout << "addr1" << endl;

    ll L = 1, R = 1e9+100;
    while(L<R) {
        ll mid = (L+R)/2;
        if(check(mid)) R = mid;
        else L = mid + 1;

        //cout << "checking: " << L << ' ' << R << ' ' << check(mid) << endl;
    }
    if(L> 1e9) L = -1;
    cout << L << '\n';
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    ll t; cin >> t;
    while(t--) {
        solve();
    }

    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3772kb

input:

3
5
1 1
3 7
3 4
4 3
5 10
1
10 100
3
10 100
10 1000
10 10000

output:

2
0
-1

result:

ok 3 lines

Test #2:

score: 0
Accepted
time: 38ms
memory: 6240kb

input:

1135
2
6 5
8 8
8
2 9
2 10
4 4
5 3
6 2
6 8
8 2
8 7
1
9 1
6
4 6
6 1
6 2
9 10
10 1
10 7
5
1 6
2 5
6 7
8 6
10 3
8
1 10
5 4
5 7
6 1
6 6
8 4
9 1
9 4
8
1 1
1 3
2 9
3 3
5 9
6 10
9 7
10 7
3
5 8
6 6
10 6
7
2 9
4 7
5 10
6 3
6 7
8 9
10 1
6
1 4
2 8
5 9
7 10
9 1
10 5
9
2 7
4 5
5 9
6 10
7 4
9 4
9 9
10 3
10 7
1
3 1...

output:

0
3
0
3
1
3
6
0
3
2
2
0
2
5
0
1
5
1
2
0
0
0
1
4
2
0
2
1
3
0
3
2
3
2
5
3
1
1
0
1
1
1
0
2
0
1
0
1
0
2
1
0
2
3
4
4
1
1
1
0
1
3
0
1
4
4
3
0
0
2
2
6
4
2
1
0
0
1
0
2
1
2
0
1
1
3
0
0
1
2
0
3
0
2
2
2
1
0
0
0
5
1
2
0
6
1
1
1
2
2
2
0
3
1
4
3
6
0
8
1
1
3
0
2
2
4
1
1
0
0
0
7
2
2
1
0
0
3
1
2
1
1
2
5
3
0
3
3
3
5
...

result:

ok 1135 lines

Test #3:

score: 0
Accepted
time: 933ms
memory: 49680kb

input:

1
1000000
2 57841
2 357142
3 496329
3 545446
4 503408
4 590762
5 78281
6 196926
6 349414
7 200245
8 953412
11 616898
12 592065
13 945945
15 20908
15 852722
16 221184
16 401521
17 884478
18 186072
18 931445
19 833560
20 314177
21 138453
21 731965
22 172104
23 595921
25 372617
27 545759
28 977029
30 4...

output:

994024

result:

ok single line: '994024'

Test #4:

score: 0
Accepted
time: 861ms
memory: 64708kb

input:

1
1000000
6 1991827
13 8125243
19 22493
24 4282711
28 356362
39 765152
41 6737899
44 8549464
57 4530192
64 7201376
67 6695629
70 3830504
70 6658581
71 4591382
71 8349070
75 2107828
76 4073563
81 2712838
92 1391185
95 4663781
102 5986957
113 8423636
118 7826607
122 1171556
122 3118750
160 938066
162 ...

output:

9609125

result:

ok single line: '9609125'

Test #5:

score: 0
Accepted
time: 728ms
memory: 66960kb

input:

1
1000000
108 565196036
597 561009880
1007 831705109
2597 55966094
2869 765993518
3025 202191673
3283 237167825
3410 829643653
4879 960747182
7284 679152790
8765 64201585
8899 97619554
9320 713144607
9519 991746776
9913 346063307
11161 970513525
11256 975123550
12073 778562963
14286 206857559
15803 ...

output:

268764694

result:

ok single line: '268764694'

Test #6:

score: 0
Accepted
time: 49ms
memory: 6476kb

input:

1135
9
1 7
3 7
4 10
5 2
6 8
7 10
8 3
9 10
10 4
9
1 4
3 2
4 1
5 3
5 7
7 2
8 4
10 7
10 10
5
3 10
4 4
7 3
8 8
9 7
8
4 1
4 4
5 5
6 4
8 3
8 4
9 2
9 4
3
1 4
5 3
10 9
7
2 6
3 4
4 2
6 3
6 9
8 3
8 7
7
1 5
3 6
4 8
4 9
5 10
8 4
8 10
1
8 6
9
1 6
2 6
3 9
5 9
6 7
6 9
8 1
9 4
10 4
5
3 9
4 3
4 6
6 4
8 5
7
1 1
2 1
3...

output:

3
2
1
1
1
2
2
0
3
3
4
0
4
1
3
2
0
0
0
3
2
6
3
0
1
0
4
0
3
0
2
0
3
0
0
1
4
0
1
2
4
0
2
1
1
1
2
8
1
1
1
1
1
5
0
1
0
3
0
3
2
2
3
2
5
0
0
2
6
4
3
2
2
1
2
0
0
4
5
0
6
5
0
4
3
5
4
1
3
0
0
2
0
8
2
1
1
2
1
3
1
1
4
0
5
0
4
0
1
6
0
7
1
1
0
3
2
1
5
1
3
1
1
8
3
0
2
1
1
0
0
1
1
1
0
6
1
1
1
1
0
0
1
3
1
4
0
2
0
1
...

result:

ok 1135 lines

Test #7:

score: 0
Accepted
time: 770ms
memory: 49796kb

input:

1
1000000
1 421151
2 313604
3 982622
4 993745
5 997253
6 859839
7 835793
8 324554
9 553026
10 218950
11 672201
12 373214
13 147841
14 445973
15 807912
16 753995
17 564224
18 662086
19 862430
20 378806
21 591406
22 415543
23 490080
24 184083
25 287323
26 578004
27 302543
28 302371
29 689597
30 538475...

output:

492642

result:

ok single line: '492642'

Test #8:

score: 0
Accepted
time: 849ms
memory: 64956kb

input:

1
1000000
4 5761079
27 9913703
31 3480982
33 8607438
37 3321663
64 3998110
72 4273261
78 7438482
84 8988669
96 920933
101 9309679
106 2230436
118 8605436
123 104422
129 7742745
131 4597839
139 9509656
142 3293909
159 9386630
176 9018043
188 3538661
207 9103530
233 2796496
239 7390510
246 2350961
249...

output:

4801594

result:

ok single line: '4801594'

Test #9:

score: 0
Accepted
time: 867ms
memory: 67032kb

input:

1
1000000
1659 745509192
1793 453656007
2417 245865714
3481 181708105
4181 423236911
5279 477367945
7195 966897525
9086 169940320
12642 77818181
14303 26150912
15915 448404964
16486 168882999
16531 105802492
16723 521426994
16754 508715351
19350 563835961
20119 410674400
20775 157959337
20870 320155...

output:

257246803

result:

ok single line: '257246803'

Test #10:

score: 0
Accepted
time: 653ms
memory: 49972kb

input:

1
1000000
1 199948
2 400091
2 463093
3 30523
4 771947
6 320897
7 104702
8 993244
9 926737
10 794612
11 210817
12 351420
13 495204
14 86010
16 589773
17 940494
18 467002
19 785066
20 724000
21 843646
22 47780
23 44610
24 494920
25 717543
27 869625
27 888906
28 972386
29 138651
30 73442
31 229124
32 4...

output:

983172

result:

ok single line: '983172'

Test #11:

score: 0
Accepted
time: 864ms
memory: 64776kb

input:

1
1000000
8 4343641
20 9188668
27 7784999
36 567704
71 225957
104 1690417
111 6719613
130 3931557
131 4091107
138 6733754
140 694514
143 5699446
164 8271151
190 5161164
204 6604398
219 7818039
225 103011
225 1033586
229 5290991
258 6252181
268 7412984
269 1107497
270 5043326
282 5968288
303 893538
3...

output:

9374697

result:

ok single line: '9374697'

Test #12:

score: 0
Accepted
time: 875ms
memory: 66960kb

input:

1
1000000
339 331918409
1828 806301739
4285 288684076
5821 210020913
6987 489751813
8084 346009704
9692 770088627
10407 404154547
10866 421926603
11062 935900735
11722 724947155
13636 832546152
16251 197187715
16251 291560397
17148 385272967
18475 77755669
19621 568102456
21145 20338367
21638 135488...

output:

907611400

result:

ok single line: '907611400'

Test #13:

score: 0
Accepted
time: 67ms
memory: 8072kb

input:

1135
10
1 3
1 7
2 3
2 5
4 7
4 8
6 1
6 4
7 5
7 8
8
1 4
2 2
2 3
3 5
3 10
6 8
9 1
9 4
1
10 7
1
2 5
6
1 6
1 9
5 2
5 9
8 1
8 4
6
5 8
5 9
6 5
6 10
8 3
8 9
9
1 5
1 6
4 9
5 6
5 7
7 2
7 10
10 2
10 3
3
6 9
10 5
10 8
3
4 6
4 7
7 10
1
8 6
7
1 2
2 3
2 10
3 4
3 6
5 4
5 9
3
2 1
2 9
7 7
8
6 2
6 8
7 6
7 7
8 2
8 3
10...

output:

4
7
0
0
2
3
3
1
1
0
4
1
4
1
0
1
0
7
1
2
1
3
3
1
4
4
0
0
2
0
2
5
0
3
1
3
2
4
0
0
4
2
0
6
5
2
1
3
0
1
2
0
2
2
2
2
0
1
4
5
0
6
5
5
0
0
2
0
2
3
1
5
5
4
3
6
0
2
3
7
1
0
0
0
1
1
4
2
5
4
0
0
3
3
0
0
1
0
3
1
2
5
3
2
3
5
0
1
3
7
4
3
3
0
2
0
0
1
1
3
3
1
0
0
3
1
0
0
6
3
6
7
1
0
0
4
4
0
0
1
4
2
3
2
1
6
0
0
2
0
...

result:

ok 1135 lines

Test #14:

score: -100
Time Limit Exceeded

input:

1
1000000
2 77901
2 299883
4 428639
4 813168
5 100173
5 782917
7 40384
7 449788
11 236799
11 975047
12 459959
12 627756
14 268070
14 838229
15 42307
15 750817
18 429714
18 542540
20 396104
20 555946
24 382023
24 670885
25 123347
25 160290
26 338330
26 462536
29 78983
29 370000
32 431681
32 899225
33...

output:

993613

result: