• 612D The Union of k-Segments


    传送门

    题目大意

    给定n个区间,问你被覆盖至少k次的区间(两端连续区间可以合并)最少有多少个,并输出。

    分析

    大水题呀QwQ,只需要将每个点的位置及它是左端点还是右端点这两个信息存起来然后进行一些简单操作就行了,详见代码。

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cctype>
    #include<cmath>
    #include<cstdlib>
    #include<queue>
    #include<ctime>
    #include<vector>
    #include<set>
    #include<map>
    #include<stack>
    using namespace std;
    #define sp cout<<"---------------------------------------------------"<<endl
    int tot,oul[1000100],our[1000100];
    struct node {
          int a,b;
    };
    bool operator < (const node x,const node y){
          if(x.a==y.a)return x.b<y.b;
          return x.a<y.a;
    }
    vector<node>b;
    int main(){
          int n,m,i,le,ri;
          scanf("%d%d",&n,&m);
          for(i=1;i<=n;i++){
              scanf("%d%d",&le,&ri);
              b.push_back({le,0});
              b.push_back({ri,1});
          }
          sort(b.begin(),b.end());
          int wl=0,is=0;
          for(i=0;i<(int)b.size();i++){
              if(b[i].b==0)wl++;
                else wl--;
              if(wl>=m&&!is)oul[++tot]=b[i].a,is=1;
              if(wl<m&&is)our[tot]=b[i].a,is=0;
          }
          cout<<tot<<endl;
          for(i=1;i<=tot;i++)
            printf("%d %d
    ",oul[i],our[i]);
          return 0;
    }
  • 相关阅读:
    JavaSE 学习笔记04丨异常
    Codeforces Round #677 (Div. 3) E、G题解
    JavaSE 学习笔记03丨继承、接口、多态、内部类
    ftp通过了用户验证但是连接超时
    实型变量
    3dmax放样
    画直线算法
    VAE变分自动编码器
    RNN 、LSTM长短期记忆网络
    java比较字符串
  • 原文地址:https://www.cnblogs.com/yzxverygood/p/9345482.html
Copyright © 2020-2023  润新知