CF1000C Covered Points Count(拆分思想,分成2种类型)

简介: CF1000C Covered Points Count(拆分思想,分成2种类型)

You are given nn segments on a coordinate line; each endpoint of every segment has integer coordinates. Some segments can degenerate to points. Segments can intersect with each other, be nested in each other or even coincide.


Your task is the following: for every k  in [1..n] , calculate the number of points with integer coordinates such that the number of segments that cover these points equals kk . A segment with endpoints  li and  ri covers point  x if and only if  li≤x≤ri .


输入格式



The first line of the input contains one integer n  ( 1≤n≤2⋅10^5 ) — the number of segments.


The next n  lines contain segments. The  i -th line contains a pair of integers li,ri (  0≤li≤ri≤10^18 ) — the endpoints of the i  -th segment.


输出格式



Print n space separated integers   cnt1,cnt2,…,cntn , where  cnti is equal to the number of points such that the number of segments that cover these points equals to i  .


题意翻译



题目大意:

给你n个区间,求被这些区间覆盖层数为k(k<=n) 的点的个数


输入格式:

第一行一个整数,n ,n<=2*10^5

以下n 行,每行有两个整数,即这个区间的左右端点l,r (0<=l<=r<=1018)


输出格式:


n个整数,即每个被覆盖层数对应的点的个数


输入输出样例



输入 #1

1. 3
2. 0 3
3. 1 3
4. 3 8



输出 #1

6 2 1


输入 #2

 3
 1 3
 2 4
5 7


输出 #2

5 2 0


说明/提示



The picture describing the first example:

f7145253feec1ed88feafe2615e50e76.png

Points with coordinates [0, 4, 5, 6, 7, 8] are covered by one segment, points  [1,2] are covered by two segments and point [3]  is covered by three segments.


The picture describing the second example:

706b6390cb8ea97e94c5bb6cb80a68a6.png

Points [1, 4, 5, 6, 7] are covered by one segment, points [2, 3] are covered by two segments and there are no points covered by three segments.


题目分析我们找的是被覆盖的层数所对应的点数,于是我们可以想到建立一个结构体,放每个线段的起点,和标记层数,我们把开头记为层数加1,末尾记为层数减1,然后搞一个点顺序的排序,然后循环减出每个层数对应的点数。具体实现看代码。感谢观看,如果觉得满意的点个赞鼓励一下。


#include<iostream>
#include<cstdio>
#include<cmath>
#include<string.h>
#include<algorithm>
using namespace std;
struct Sort//定义一个类
{
  long long w,a;
  //w为位置,a为做的操作
}p[1000000];
bool cmp(Sort a,Sort b)
{
  return a.w<b.w;//按w的大小排序位置 
}
int i,j,k,sum=0,m;
long long ans[1000000],l,r,n,now=0;//注意开long long
int main()
{
  long long n;
  cin>>n;
  for(i=1;i<=n;i++)
  {
    long long l,r;
    cin>>l>>r;
    sum++;
    p[sum].w=l;
    p[sum].a=1;//区间起始位置为++
    sum++;
    p[sum].w=r+1;//结束位置为--
    p[sum].a=-1;
  }
  sort(p+1,p+sum+1,cmp);//排序
  l=p[1].w;//当前位置最小 
  now=p[1].a;//当前覆盖层数
  for(i=2;i<=sum;i++)
  {
    ans[now]+=p[i].w-l;//当前层数的个数为前后操作位置的差
    l=p[i].w;//位置 
    now+=p[i].a;// 
  }
  for(i=1;i<=n;i++)
cout<<ans[i]<<" ";//输出呀
  return 0;
}


相关文章
|
7月前
|
人工智能 JSON API
Nacos 发布 MCP Registry,实现存量应用接口“0改动”升级到 MCP 协议
MCP(Model Calling Protocol)生态快速发展,Nacos作为MCP Registry,通过与Higress网关结合,实现“0代码”将存量API转化为MCP协议接口。本文详细解析了Nacos如何快速构建MCP Server,包括工具列表暴露、协议转换原理及优势。同时,通过高德API实例演示“0改动”适配流程。Nacos 3.0正式发布,定位AI应用服务管理平台,支持动态服务发现与配置管理,助力MCP生态发展。欢迎参与社区共建!
1364 1
|
11月前
|
机器学习/深度学习 数据采集 数据挖掘
使用Python实现智能食品消费习惯预测的深度学习模型
使用Python实现智能食品消费习惯预测的深度学习模型
364 19
|
10月前
|
Java 关系型数据库 数据库
微服务SpringCloud分布式事务之Seata
SpringCloud+SpringCloudAlibaba的Seata实现分布式事务,步骤超详细,附带视频教程
788 1
|
11月前
|
容器
jdk8新特性-详情查看文档
jdk8新特性-详情查看文档
182 7
|
自然语言处理 Java API
如何在Java中实现多语言国际化支持
如何在Java中实现多语言国际化支持
MATLAB符号计算
【10月更文挑战第9天】MATLAB不仅擅长数值计算,还具备强大的符号计算功能,支持代数运算、方程求解、微积分等。本文介绍如何使用MATLAB的符号工具箱进行符号变量定义、方程求解、微分积分及矩阵运算,并通过多个实际应用案例展示了其在机械系统、电路分析、经济优化和物理运动学等领域的应用。此外,文章还提供了符号计算的最佳实践和未来展望。
|
SQL 监控 安全
架构设计第五讲:数据巡检系统的设计与应用
架构设计第五讲:数据巡检系统的设计与应用
845 0
lanqiaoOJ 日期问题
lanqiaoOJ 日期问题
113 0
|
存储 SQL 运维
跨节点参数的缘起与今生
Dataphin v3.13引入了跨节点参数功能,允许任务间传递消息。输出节点(如SQL、Shell、Python任务)能输出参数,输入节点可以接收并使用这些参数。此功能解决了通过公共存储中转消息的复杂性和低效问题。应用场景包括:金融企业的币种转换,其中汇率任务(输出节点)提供汇率,转换任务(输入节点)使用该汇率;以及产品目录更新检查,通过跨节点参数控制是否需要执行数据导入任务。用户可以通过任务编辑器设置和传递跨节点参数,并在运维中进行补数据操作。
473 2
跨节点参数的缘起与今生
|
存储 机器学习/深度学习 搜索推荐
long long类型介绍
long long类型介绍