code forces1249D Too Many Segments

Posted sj-gank

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了code forces1249D Too Many Segments相关的知识,希望对你有一定的参考价值。

大佬连接::https://blog.csdn.net/weixin_43847416/article/details/102749985

题意::删除最少数量的区段使每个整数点的覆盖次数不大于K

思路::

以区间左端点为头,右端点由小到大排序,如果端点相同,按标号存入。

从头开始遍历每个点,判断每个点上覆盖次数,大于k时删除最长的那个区间。

 1 #include<bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 const int maxn=2e5+5;
 5 struct node{
 6     int r,index;
 7     node(){}
 8     node (int  rr,int ii ):r(rr),index(ii){}
 9     bool operator < (const node &rh)const{
10         if(r==rh.r){return index<rh.index;}
11         else{return r<rh.r;}
12     }
13 };
14 vector<int>ans;
15 vector<node>p[maxn];
16 
17 int main()
18 {
19     int n,k,a,b;
20     scanf("%d%d",&n,&k);
21     for(int i=1;i<=n;i++){
22         scanf("%d%d",&a,&b);
23         p[a].push_back(node(b,i));
24     }
25     set<node>s;
26     for(int i=1;i<maxn;i++){
27         while(s.size()&&(*s.begin()).r<i){s.erase(*s.begin());}
28         for(int j=0;j<p[i].size();j++){
29             s.insert(p[i][j]);
30         }
31         while(s.size()>k){
32             ans.push_back((*s.rbegin()).index);
33             s.erase(*s.rbegin());
34         }
35     }
36     int len=ans.size();
37     printf("%d
",len);
38     for(int i=0;i<len;i++){
39         printf("%d ",ans[i]);
40     }
41     return 0;
42 }

 

以上是关于code forces1249D Too Many Segments的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 R0915: Too many statements (69/50) (too-many-statements) in pylint?

too many open files怎么解决

中标麒麟 错误异常too many open files解决方法

错误 310 (net::ERR_TOO_MANY_REDIRECTS):

kafka too many open files的解决方法

too many open files 的问题怎么解决