题解 | H. Take the Elevator

Take the Elevator

https://ac.nowcoder.com/acm/contest/33187/H

H. Take the Elevator

Solution

上行下行两个方向显然分开考虑,一次上下取两者需要移动距离的较大值。
考虑上行时,上升高度取决于最大的bib_i,因此考虑将bib_i大的先满足,在取满mmbib_i最大的之后,考虑用大根堆维护已选乘客的aia_i最大值,接下来可以将bjmax{ai}b_j\le \max\{a_i\}的乘客加入(相当于有人在ii上电梯前下电梯),持续维护直到无法找到jj
考虑下行时,上升高度取决于最大的aia_i,因此考虑将aia_i大的先满足,在取满mmaia_i最大的之后,考虑用大根堆维护已选乘客的bib_i最大值,接下来可以将ajmax{bi}a_j\le \max\{b_i\}的乘客加入(相当于有人在ii下电梯后上电梯),持续维护直到无法找到jj
对比两个方向,可以发现操作完全一致。
时间复杂度O(nlogn)O(n\log n)

void solve(multiset<pair<int, int> > &st, int m) {
    priority_queue<int>pq;
    for (int i = 0; i < m && !st.empty(); ++i) {
        pq.push((*st.rbegin()).second);
        st.erase(st.lower_bound(*st.rbegin()));
    }
    while (!st.empty()) {
        auto it = st.lower_bound(make_pair(pq.top() + 1, 0));
        if (it == st.begin())break;
        if (it == st.end())it = st.lower_bound(*st.rbegin());
        else it = prev(it);
        pq.pop();
        pq.push(it -> second);
        st.erase(it);
    }
}

int main() {
    int n = fast_IO::read(), m = fast_IO::read(), k = fast_IO::read();
    multiset<pair<int, int> >up, down;
    for (int i = 1; i <= n; ++i) {
        int l = fast_IO::read(), r = fast_IO::read();
        if (l < r) {
            up.insert(make_pair(r, l));
        }
        else {
            down.insert(make_pair(l, r));
        }
    }
    ll ans = 0;
    while (!up.empty() || !down.empty()) {
        int ansup = 0, ansdown = 0;
        if (!up.empty()) {
            ansup = (*up.rbegin()).first - 1;
            solve(up, m);
        }
        if (!down.empty()) {
            ansdown = (*down.rbegin()).first - 1;
            solve(down, m);
        }
        ans += max(ansup, ansdown) * 2;
    }
    printf("%lld", ans);
    return 0;
}
全部评论

相关推荐

合适才能收到offe...:招聘上写这些态度傲慢的就别继续招呼了,你会发现hr和面试官挺神的,本来求职艰难就可能影响一些心态了,你去这种公司面试的话,整个心态会炸的。
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
5652次浏览 53人参与
# 你的实习产出是真实的还是包装的? #
1171次浏览 29人参与
# 米连集团26产品管培生项目 #
4378次浏览 203人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
6964次浏览 37人参与
# 简历第一个项目做什么 #
31275次浏览 314人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
186406次浏览 1115人参与
# 巨人网络春招 #
11196次浏览 223人参与
# 研究所笔面经互助 #
118765次浏览 577人参与
# 面试紧张时你会有什么表现? #
30406次浏览 188人参与
# 简历中的项目经历要怎么写? #
309439次浏览 4157人参与
# AI时代,哪些岗位最容易被淘汰 #
62538次浏览 736人参与
# 网易游戏笔试 #
6329次浏览 83人参与
# 职能管理面试记录 #
10703次浏览 59人参与
# 把自己当AI,现在最消耗你token的问题是什么? #
6902次浏览 154人参与
# 从哪些方向判断这个offer值不值得去? #
56709次浏览 357人参与
# 你怎么看待AI面试 #
179317次浏览 1170人参与
# 腾讯音乐求职进展汇总 #
160406次浏览 1105人参与
# 小红书求职进展汇总 #
226861次浏览 1356人参与
# 正在春招的你,也参与了去年秋招吗? #
362594次浏览 2631人参与
# 你的房租占工资的比例是多少? #
92128次浏览 896人参与
# 校招笔试 #
466773次浏览 2952人参与
# 机械求职避坑tips #
94402次浏览 567人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务