QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#744091#9730. Elevator IIshenchuan_fanTL 176ms13132kbC++202.3kb2024-11-13 20:49:492024-11-13 20:49:50

Judging History

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

  • [2024-11-13 20:49:50]
  • 评测
  • 测评结果:TL
  • 用时:176ms
  • 内存:13132kb
  • [2024-11-13 20:49:49]
  • 提交

answer

#include <bits/stdc++.h>
#define int long long

using namespace std;

void solve()
{
    int n, f;
    cin >> n >> f;
    multiset<array<int, 3>> se1;
    multiset<array<int, 3>> se2;
    multiset<array<int, 3>> se3;

    for (int i = 1; i <= n; i++)
    {
        int l, r;
        cin >> l >> r;
        if (l <= f && r >= f)
        {
            se2.insert({r, l, i});
        }
        else if (r < f)
        {
            se3.insert({r, l, i});
        }
        else
        {
            se1.insert({l, r, i});
        }
    }

    vector<int> ans;
    int tot = 0;
    bool ok=true;
    while (ans.size() != n)
    {
        if (se2.empty())
        {
            
            if (se1.size())
            {
                auto [l,r,pos]=*se1.begin();
                se2.insert({r,l,pos});
                se1.erase(se1.begin());
                continue;
            }

            if (se3.size())
            {
                for (auto it = se3.rbegin(); it != se3.rend(); it++)
                {
                    auto [r, l, pos] = *it;
                    ans.push_back(pos);
                    tot += r - l;
                }
            }
            break;
        }   
        auto it = se2.rbegin();
        auto [r, l, pos] = *it;
        tot+=max(r-l,r-f);
        f=max(r,f);
        ans.push_back(pos);
        f = r;
        se2.erase(--se2.end());
        for(auto it:se2){
            se3.insert(it);
        }
        se2.clear();
        for (auto it = se1.begin(); it != se1.end();)
        {
            auto nxt = it;
            nxt++;
            auto [l, r, pos] = *it;
            if (l > f)
            {
                it++;
                continue;
            }
            else if (r <= f)
            {
                se3.insert({r,l,pos});
                se1.erase(it);
                it = nxt;
            }
            else
            {
                se2.insert({r,l,pos});
                se1.erase(it);
                it = nxt;
            }
        }
    }
    cout<<tot<<'\n';
    for(auto x:ans){
        cout<<x<<' ';
    }
    cout<<'\n';
}

signed main()
{
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    int T = 1;
    cin >> T;
    while (T--)
    {
        solve();
    }
    return 0;
}

详细

Test #1:

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

input:

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

output:

11
3 4 1 2 
5
2 1 

result:

ok ok 2 cases (2 test cases)

Test #2:

score: 0
Accepted
time: 86ms
memory: 3692kb

input:

6100
19 52
51 98
2 83
40 58
96 99
39 55
72 94
15 17
4 15
48 99
2 99
77 78
35 77
44 62
79 81
30 31
1 48
48 76
68 99
60 66
6 19
44 53
64 92
17 28
67 98
9 99
40 65
16 27
99 100
15 56
4 6
24 97
84 96
47 49
37 38
77 79
13 40
13 92
71 100
47 93
90 91
72 81
15 48
32 71
19 17
95 99
10 23
18 100
90 93
52 92
...

output:

524
9 4 18 10 1 6 2 14 11 12 17 19 13 3 5 16 15 7 8 
194
5 4 2 6 1 3 
397
4 11 1 5 12 10 13 14 8 16 2 6 15 9 7 3 
733
7 3 1 10 8 6 4 17 5 16 13 11 15 12 18 14 9 19 2 
244
3 2 8 6 12 5 4 14 10 11 9 1 15 13 7 
422
18 1 6 11 10 2 7 13 9 4 12 20 14 5 15 8 19 16 3 17 
104
4 1 3 2 
187
4 8 3 1 2 6 7 5 9 1...

result:

ok ok 6100 cases (6100 test cases)

Test #3:

score: 0
Accepted
time: 176ms
memory: 13132kb

input:

3
100000 9859
150464 951410
637107 897197
236268 936879
353406 403927
511229 999416
861211 958428
186246 446149
162388 805753
449016 817386
147119 604340
579101 926848
958992 987299
859662 907007
507058 690951
719158 856587
789149 927957
691705 707085
694110 845505
192759 616586
905489 935507
937041...

output:

24903933702
92856 65801 39096 51617 33773 65474 13509 94722 12929 21862 15727 17341 87576 27729 11792 2606 55052 48077 50887 72396 33512 16861 98442 69859 42944 15997 56377 66434 7904 41121 59405 40847 9663 68634 19087 34470 50759 37212 10095 24530 23408 6562 70457 96796 55563 25733 74144 93686 2850...

result:

ok ok 3 cases (3 test cases)

Test #4:

score: -100
Time Limit Exceeded

input:

3
100000 932101
80818 80823
538842 538844
406812 406818
625053 625054
511066 511073
667363 667365
527022 527023
621329 621331
855832 855852
796168 796169
268927 268929
650891 650895
312793 312794
873256 873260
424896 424929
266271 266272
902201 902209
842863 842864
361599 361610
647851 647855
148132...

output:

986597
82641 30352 11990 41160 74602 95031 10872 13641 70364 69688 83583 94175 77157 82305 60601 21546 21059 98950 61273 47916 9311 25865 48329 29951 79449 26301 33491 96045 59186 89170 37084 58554 99074 38280 78061 69175 74069 26606 30169 81023 72809 43957 11035 22681 57154 73949 1545 46747 26464 2...

result: