• 51nod1428(优先队列)


    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428

    题意:中文题诶~

    思路:贪心

    问最少要多少教室就是求最多有多少个时间段产生了交集咯。我们先用结构体存储区间并将其按照左端点升序排列,若左端点相同则按右端点升序排列。

    接下来遍历所有区间,并维护一个优先队列,其中存储区间右端点值。对于当前区间,我们将优先队列中所有比当前区间左端点小的元素删除(因为其所在区间不会与当前区间相交嘛),然后再将当前区间的右端点加入优先队列。当前优先队列的大小就是当前能得到的最大交集数。其中道理并不复杂就不多说啦。。。

    代码:

     1 #include <bits/stdc++.h>
     2 #define MAXN 10010
     3 using namespace std;
     4 
     5 struct Node{
     6     int l, r;
     7 }gg[MAXN];
     8 
     9 int cmp(Node a, Node b){
    10     return a.l==b.l?a.r<b.r:a.l<b.l;
    11 }
    12 
    13 int main(void){
    14     int n, ans=0;
    15     cin >> n;
    16     for(int i=0; i<n; i++){
    17         cin >> gg[i].l >> gg[i].r;
    18     }
    19     sort(gg, gg+n, cmp);
    20     priority_queue<int, vector<int>, greater<int> > q;
    21     for(int i=0; i<n; i++){
    22         while(!q.empty()){
    23             int a=q.top();
    24             if(a<=gg[i].l){
    25                 q.pop();
    26             }else{
    27                 break;
    28             }
    29         }
    30         q.push(gg[i].r);
    31         int cnt=q.size();
    32         ans=max(ans, cnt);
    33     }
    34     cout << ans << endl;
    35     return 0;
    36 }
  • 相关阅读:
    wireshark安装
    高效使用搜索引擎
    MFC 网络编程 -- 总结
    MFC Grid control 2.27
    A Popup Progress Window
    Showing progress bar in a status bar pane
    Progress Control with Text
    Report List Controls
    第三方
    CBarChart柱形图类
  • 原文地址:https://www.cnblogs.com/geloutingyu/p/6294773.html
Copyright © 2020-2023  润新知