QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#719680#8648. Towerhhoppitree0 1425ms143776kbC++174.1kb2024-11-07 07:53:152024-11-07 07:53:16

Judging History

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

  • [2024-11-07 07:53:16]
  • 评测
  • 测评结果:0
  • 用时:1425ms
  • 内存:143776kb
  • [2024-11-07 07:53:15]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

const int N = 2e5 + 5;

long long res[N], id[N], mn[1 << 21], lz[1 << 21];

void build(int k, int l, int r) {
    mn[k] = (l == 1 ? 0 : 3e18);
    if (l == r) return;
    int mid = (l + r) >> 1;
    build(k << 1, l, mid);
    build(k << 1 | 1, mid + 1, r);
}

void pushdown(int k) {
    if (!lz[k]) return;
    mn[k << 1] = 3e18, lz[k << 1] = 1;
    mn[k << 1 | 1] = 3e18, lz[k << 1 | 1] = 1;
    lz[k] = 0;
}

void modify(int k, int l, int r, int x, int y) {
    if (l > y || r < x) return;
    if (l >= x && r <= y) {
        mn[k] = 3e18, lz[k] = 1;
        return;
    }
    pushdown(k);
    int mid = (l + r) >> 1;
    modify(k << 1, l, mid, x, y);
    modify(k << 1 | 1, mid + 1, r, x, y);
    mn[k] = min(mn[k << 1], mn[k << 1 | 1]);
}

void update(int k, int l, int r, int x, long long y) {
    mn[k] = min(mn[k], y);
    if (l == r) return;
    pushdown(k);
    int mid = (l + r) >> 1;
    if (x <= mid) update(k << 1, l, mid, x, y);
    else update(k << 1 | 1, mid + 1, r, x, y);
}

long long query(int k, int l, int r, int x, int y) {
    if (l > y || r < x) return 3e18;
    if (l >= x && r <= y) return mn[k];
    pushdown(k);
    int mid = (l + r) >> 1;
    return min(query(k << 1, l, mid, x, y), query(k << 1 | 1, mid + 1, r, x, y));
}

signed main() {
    int n, q;
    long long D, A, B;
    scanf("%d%d%lld%lld%lld", &n, &q, &D, &A, &B);
    vector< pair<long long, int> > p;
    vector<long long> lsh;
    for (int i = 1; i <= n; ++i) {
        long long l, r; scanf("%lld%lld", &l, &r);
        p.push_back({l, 0}), p.push_back({r + 1, 0});
        lsh.push_back(l % D), lsh.push_back((r + 1) % D);
    }
    for (int i = 0; i < 100000000; i += D) {
        p.push_back({i, q + 1});
    }
    lsh.push_back(0), lsh.push_back(D - 1);
    p.push_back({0, q + 1});
    for (int i = 1; i <= q; ++i) {
        long long x; scanf("%lld", &x);
        id[i] = x;
        p.push_back({x, i});
        lsh.push_back(x % D);
        res[i] = 3e18;
    }
    sort(lsh.begin(), lsh.end());
    lsh.erase(unique(lsh.begin(), lsh.end()), lsh.end());
    sort(p.begin(), p.end());
    auto getId = [&](long long x) {
        return lower_bound(lsh.begin(), lsh.end(), x) - lsh.begin() + 1;
    };
    build(1, 1, lsh.size());
    set< pair<int, int> > S = {{0, D - 1}};
    long long tag = 0;
    for (int m = p.size(), i = 0, j, nw = 0; i < m; ) {
        j = i;
        auto preMax = [&](int x) {
            int val = 1;
            if (!S.empty() && (S.begin() -> first) <= x) {
                auto it = --S.lower_bound({x + 1, 0});
                val = (it -> second) + 1;
            }
            update(1, 1, lsh.size(), x, query(1, 1, lsh.size(), val, x));
        };
        while (j < m && p[j].first / D == p[i].first / D) {
            preMax(getId(p[j++].first % D));
        }
        preMax(lsh.size());
        if (i) update(1, 1, lsh.size(), 1, query(1, 1, lsh.size(), lsh.size(), lsh.size()) + A * D - B);
        S.clear();
        int lst = 1;
        vector< pair<int, int> > qr;
        while (i < j) {
            int tid = getId(p[i].first % D);
            if (nw) {
                modify(1, 1, lsh.size(), lst, tid - 1);
                S.insert({lst, tid - 1});
            }
            nw ^= !p[i].second;
            lst = tid;
            if (p[i].second) qr.push_back({p[i].first, p[i].second});
            ++i;
        }
        if (nw) {
            modify(1, 1, lsh.size(), lst, lsh.size());
            S.insert({lst, lsh.size()});
        }
        for (auto [x, y] : qr) {
            int tid = getId(x % D);
            preMax(tid), res[y] = tag + query(1, 1, lsh.size(), tid, tid);
        }
        if (i != m && p[i].first / D != p[i - 1].first / D + 1) {
            if (nw) break;
            S.clear();
            tag += (p[i + 1].first / D - p[i].first / D - 1) * min(A * D - B, 0ll);
        }
    }
    for (int i = 1; i <= q; ++i) {
        if (res[i] > 2e18) puts("-1");
        else printf("%lld\n", res[i] + id[i] % D * A + id[i] / D * B);
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Time Limit Exceeded

Test #1:

score: 5
Accepted
time: 207ms
memory: 20516kb

input:

2000 200000
500 66309 387245
91 122
793 1029
1127 1131
1304 1611
2007 2039
2601 2701
2906 3052
3253 3263
3495 3609
4157 4225
4283 4283
4757 4766
4786 4847
4885 5086
5326 5342
5607 5750
5847 5877
6093 6230
6548 6793
7206 7308
7413 7419
7752 7780
8244 8410
8501 8515
9335 9447
9512 9514
9602 9906
10076...

output:

-1
-1
1545376776
-1
1355518146
-1
-1
1538578776
1124179254
736677313
275840218
-1
314646902
120181124
592802647
1470145222
1194355416
630012616
541479470
1380556431
748297307
1579324340
83071935
-1
547672724
766967273
940718126
967114418
448357717
-1
208077708
264694996
68332763
-1
699361243
1542138...

result:

ok 200000 lines

Test #2:

score: 5
Accepted
time: 205ms
memory: 20864kb

input:

2000 200000
500 45649 229891
123 232
663 994
1023 1041
1065 1065
1523 1542
1962 1983
2044 2066
2449 2453
2589 2591
2788 2810
3207 3418
3666 3685
3944 3945
4256 4320
4699 4706
4915 4950
5196 5207
5271 5545
5705 5707
5867 6034
6273 6328
6364 6380
6764 6787
6974 7007
7363 7365
7632 7648
7754 7924
7954 ...

output:

-1
-1
1044862158
349767467
-1
-1
-1
-1
534260754
853076992
514160380
514034955
-1
-1
680989150
557376047
-1
410302211
-1
-1
14156128
-1
-1
656642980
-1
335413929
465525211
1047741337
1007928386
-1
183280077
-1
842399625
553981561
-1
-1
486838795
823208939
597570650
68518820
-1
-1
36379839
-1
4959492...

result:

ok 200000 lines

Test #3:

score: 5
Accepted
time: 206ms
memory: 19964kb

input:

2000 200000
500 11 228852
288 470
648 922
1193 1288
1509 1516
1792 1915
2023 2061
2443 2477
2512 2693
2735 2860
3176 3196
3260 3363
3622 3658
3939 3988
4177 4223
4470 4541
4640 4789
4812 4850
5167 5246
5443 5594
5692 5804
5875 5982
6265 6286
6416 6609
6816 6833
6928 7130
7298 7305
7401 7403
7778 781...

output:

61754766
1843455
193255572
95486804
80338946
188441144
126474653
-1
119132183
159054071
107422913
158596895
105813337
-1
166163718
-1
165014783
-1
2988793
146889891
-1
75748618
-1
-1
-1
109483978
-1
112469548
163413919
67263527
170983140
128997679
168000122
-1
186380233
151702042
42025050
-1
1556077...

result:

ok 200000 lines

Test #4:

score: 5
Accepted
time: 200ms
memory: 20924kb

input:

2000 200000
500 123 507044
13 349
778 805
1289 1419
2069 2074
2126 2129
2299 2392
2629 2629
3035 3054
3171 3184
3225 3381
3967 4100
4222 4225
4432 4603
4741 4745
4972 5123
5239 5245
5412 5530
5737 5757
5859 6162
6286 6289
6452 6542
6820 6825
6940 6974
7327 7328
7686 7781
8122 8169
8499 8909
8957 896...

output:

23238378
-1
320316781
492915201
-1
118374346
-1
118865646
-1
27397189
413766267
33059543
89523552
84434908
75590808
178982529
452655813
119364449
76127495
-1
-1
296028030
320308540
475355659
-1
210903877
288320772
388500820
-1
149739573
428228318
-1
-1
-1
-1
478454749
-1
-1
-1
-1
268399317
-1
310981...

result:

ok 200000 lines

Test #5:

score: 5
Accepted
time: 200ms
memory: 20224kb

input:

2000 200000
500 367 183500
395 476
616 705
1068 1085
1392 1462
1898 2004
2105 2124
2266 2553
2678 2684
2845 2855
3145 3188
3497 3630
3705 3708
3857 3995
4221 4223
4405 4642
4724 4730
4993 5199
5224 5225
5325 5637
5722 5735
6111 6152
6322 6341
6464 6694
6764 6838
7013 7174
7249 7261
7423 7713
7803 78...

output:

-1
81789987
195275562
134586974
172718274
-1
77090919
-1
169680615
26763842
81273618
74582841
-1
-1
164912918
-1
45100263
25295842
5720062
138829861
-1
23310005
142354162
158449681
-1
43546018
5823556
-1
-1
-1
-1
125462620
-1
25779548
121436630
4706408
-1
-1
-1
87290583
-1
47107386
94590213
17249256...

result:

ok 200000 lines

Test #6:

score: 5
Accepted
time: 1402ms
memory: 141632kb

input:

195716 197150
20 41515 610194
34 34
36 36
38 38
40 40
42 42
44 44
46 46
83 83
85 85
87 87
89 89
91 91
93 93
95 95
97 97
99 99
104 104
106 106
108 108
110 110
112 112
114 115
118 118
120 120
132 132
134 134
136 136
138 138
140 140
142 142
144 144
146 146
148 148
150 150
175 175
177 177
179 179
181 18...

output:

27145048833
-1
20311977145
5823894704
12611222982
10375331362
-1
4666825214
8294213599
7946746140
15043381651
12084461892
2564209663
-1
2889605968
30371230407
13809822492
10059353510
20452787039
-1
186985672
-1
-1
-1
14667164575
21798169916
2551478619
-1
2357959404
24230797781
5359696913
11480637002...

result:

ok 197150 lines

Test #7:

score: 5
Accepted
time: 1425ms
memory: 142024kb

input:

194401 196154
20 81884 184176
27 27
29 29
31 31
33 33
35 35
37 37
39 39
41 41
43 43
45 45
103 106
110 110
114 115
119 119
121 121
123 123
125 126
128 128
130 130
132 132
135 135
137 137
170 171
173 173
175 175
179 179
181 181
183 184
186 186
203 203
205 205
207 207
210 210
212 212
214 214
216 216
22...

output:

-1
7397081928
2079536780
1740817712
7985105512
8791917840
-1
2108310564
3818312684
3403790452
-1
-1
7282843676
8094061364
8075949632
-1
4202973208
-1
5158569260
5191129360
-1
5769244224
-1
5536679820
7825620684
4417835300
10616377912
-1
7443886064
5554791552
7631714344
4169124128
10019841164
8876887...

result:

ok 196154 lines

Test #8:

score: 5
Accepted
time: 1414ms
memory: 143056kb

input:

197806 197356
20 29644 637771
3 3
5 5
7 7
9 9
11 11
13 13
15 15
17 17
19 19
21 21
71 71
73 73
75 75
77 77
79 79
81 81
83 83
85 85
87 87
89 89
94 94
96 96
98 98
100 100
102 102
104 104
106 107
122 122
124 124
126 126
128 128
131 131
133 133
135 135
156 156
158 158
160 160
163 163
165 165
216 216
218 ...

output:

-1
16958900222
16962903862
-1
-1
30908851790
986967014
7741518462
14743639172
1812847470
-1
7369833863
26993152521
2971365427
-1
-1
-1
-1
26587991346
16925804768
2134704702
17196127075
-1
26659445339
29693622258
812738814
25306954578
27428620967
29707753999
13380005667
1927010073
9821528975
-1
86888...

result:

ok 197356 lines

Test #9:

score: 5
Accepted
time: 1421ms
memory: 141972kb

input:

199268 195219
20 9959 224682
19 21
23 23
26 27
29 31
33 33
35 35
37 37
57 57
59 59
61 61
63 63
65 65
67 67
69 69
71 71
73 73
127 129
131 134
136 138
153 153
155 155
157 157
159 159
161 161
163 163
166 166
196 196
198 198
200 200
202 202
204 204
206 206
208 208
210 210
212 212
214 214
224 224
226 226...

output:

1405185734
2296959792
-1
4763754065
-1
7440241155
3592032994
9232017710
-1
2996088597
7328570009
8931662575
7527861716
8627630151
4396636490
4153239129
4674940842
7142306979
5741444947
-1
-1
203363729
5005824000
-1
5999988912
-1
10315869532
2347062895
-1
499028001
-1
6310540106
6132479839
6198718827...

result:

ok 195219 lines

Test #10:

score: 5
Accepted
time: 1405ms
memory: 143776kb

input:

194139 191791
20 37198 743960
1 1
3 3
5 5
7 7
9 9
11 11
13 13
15 15
17 17
19 19
28 28
30 30
32 32
34 34
36 36
39 39
41 41
43 43
45 45
79 79
81 81
83 83
85 85
87 87
89 89
91 91
97 97
103 103
105 105
107 107
109 109
111 111
113 114
116 116
118 119
121 121
124 124
126 126
128 128
130 130
132 132
134 13...

output:

5683965994
30465347990
13469395800
-1
24426289888
-1
3251625972
32267925872
-1
28405583136
32475193128
-1
10144378174
29396203074
33933652312
20332203612
-1
-1
2572204502
10948710528
24839410876
15655745448
4906750982
18881853592
11878734924
10340783614
3981301940
15892771104
36311460066
7953527568
...

result:

ok 191791 lines

Test #11:

score: 0
Time Limit Exceeded

input:

200000 200000
1 58118 14529
100001 100001
100006 100006
100008 100008
100010 100010
100013 100013
100019 100019
100023 100023
100026 100026
100028 100028
100032 100032
100035 100035
100042 100042
100045 100045
100048 100048
100051 100051
100053 100053
100057 100057
100064 100064
100068 100068
100071...

output:


result:


Subtask #2:

score: 0
Wrong Answer

Test #29:

score: 0
Wrong Answer
time: 3ms
memory: 8468kb

input:

1938 1960
999999 47694 9291
2883622 3085639
3674880 3745876
9982198101 9982517489
19960889157 19960925795
19962228551 19962276101
19964301694 19964730442
19964826417 19965369252
19965984922 19966442459
19968019821 19968213820
19968334967 19968392242
19968426638 19968840337
19969017519 19969109591
19...

output:

2629532778036
1673262710568
2040730384092
-1
936968466312
979181833173
217249154424
-1
3376854733974
453288498306
1191808495257
194772660096
116508067359
1917917563716
2806098123096
-1
1737385084617
1649786307423
1349890612854
3043407203193
2200709215653
-1
1277863523430
538903132932
2788471506279
2...

result:

wrong answer 2nd lines differ - expected: '1625568767553', found: '1673262710568'

Subtask #3:

score: 0
Wrong Answer

Test #44:

score: 0
Wrong Answer
time: 686ms
memory: 53312kb

input:

198085 196577
999999 1 999999
562622 895604
1799586 1975565
2518299 2941986
4934097 5403130
5755102 5996130
6036200 6112534
6391882 6431514
6451793 6555786
6613625 6621089
7130933 7204522
7335426 7522555
7748545 7784568
8184979 8494887
9066856 9178094
9303615 9384897
9716200 9719420
11693951 1183563...

output:

27793636591
-1
722989373174
395967779933
164554928593
340203577240
767735640886
638128931349
808488370439
777661458222
-1
723110350933
756913262477
860152123456
48118745350
734774231229
-1
-1
418133621292
405303496068
890908770677
-1
806542610691
-1
898938307262
-1
805921470285
870381090496
58888076...

result:

wrong answer 2nd lines differ - expected: '139076373265', found: '-1'

Subtask #4:

score: 0
Skipped

Dependency #1:

0%