社区讨论

10分求调

P4053[JSOI2007] 建筑抢修参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@m6dj0n2o
此快照首次捕获于
2025/01/26 19:18
去年
此快照最后确认于
2025/11/04 10:17
4 个月前
查看原帖
感觉我的思路和题解差不多但只有十分TAT,有没有好心人告诉我是哪里出了问题
CPP
#include<bits/stdc++.h>
using namespace std;
int N;
int main()
{
    cin >> N;
    set<long long>ddline;
    deque<array<long long,3>>build;
    priority_queue<long long>repair;
    priority_queue<long long,vector<long long>,greater<long long>>time;
    long long T=0;
    long long T1,T2;
    for(int i=1;i<=N;i++)
    {
        cin >> T1 >> T2;
        build.push_back({T2,T1,i});
        ddline.insert(T2);
    }
    sort(build.begin(),build.end());
    for(auto &ddl:ddline)
    {
        while(build.size())
        {
            auto &[d,t,id]=build.front();
            if(d<=ddl)
            {
                build.pop_front();
                time.push(t);
            }
            else break;
        }
        while(time.size())
        {
            long long t=time.top();
            if(T+t<=ddl)
            {
                T+=t;
                repair.push(t);
                time.pop();
            }
            else if(repair.size()&&t<repair.top())
            {
                T-=repair.top();
                time.pop();
                time.push(repair.top());
                repair.pop();
                repair.push(t);
                T+=t;
            }
            else break;
        }
    }
    
    cout << repair.size() << endl;
    return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...