题目:戳这里

题意:给出n个线段,问被1~n个线段覆盖的点分别有多少。

解题思路:

这题很容易想到排序后维护每个端点被覆盖的线段数,关键是端点值不好处理。比较好的做法是用差分的思想,把闭区间的线段改为前闭后开,同时在求总点数的时候,也按前闭后开的区间来求,这样就巧妙避开了两个端点之间的讨论,只用维护好一个端点就行了。

代码比文字更容易理解:

 1 #include <bits/stdc++.h>
2 #define lowbit(x) x&-x;
3 typedef long long ll;
4 const int maxn = 4e5+10;
5 const int inf = 0x3f3f3f3f;
6 const ll mod = 998244353;
7 using namespace std;
8 ll n;
9 struct nod {
10 ll x;
11 int f;
12 }co[maxn];
13 ll cnt[maxn];
14 bool cmp(nod a, nod b) {
15 if(a.x == b.x) return a.f > b.f;
16 return a.x < b.x;
17 }
18 int main(){
19 ll l,r;
20 scanf("%lld", &n);
21 for(ll i = 0ll; i < n; ++i) {
22 l=2ll*i+1ll; r=2ll*i+2ll;
23 scanf("%lld %lld", &co[l].x, &co[r].x);
24 co[r].x++;//转换为前闭后开
25 co[l].f = 1;
26 co[r].f = -1;
27 }
28 int now = 1;
29 sort(co + 1, co + 1 + 2*n, cmp);
30 for(ll i = 2ll; i <= 2ll * n; ++i) {
31 cnt[now] += co[i].x - co[i-1].x;
32 now += co[i].f;
33 }
34 for(ll i = 1; i <= n; ++i) {
35 printf("%lld ", cnt[i]);
36 }
37 return 0;
38 }

codeforces 1000C - Covered Points Count 【差分】的更多相关文章

  1. CodeForces 1000C Covered Points Count(区间线段覆盖问题,差分)

    https://codeforces.com/problemset/problem/1000/C 题意: 有n个线段,覆盖[li,ri],最后依次输出覆盖层数为1~n的点的个数. 思路: 区间线段覆盖 ...

  2. cf1000C Covered Points Count (差分+map)

    考虑如果数字范围没有这么大的话,直接做一个差分数组就可以了 但现在变大了 所以要用一个map来维护 #include<bits/stdc++.h> #define pa pair<i ...

  3. C - Covered Points Count CodeForces - 1000C (差分,离散化,统计)

    C - Covered Points Count CodeForces - 1000C You are given nn segments on a coordinate line; each end ...

  4. Educational Codeforces Round 46 C - Covered Points Count

    C - Covered Points Count emmm 好像是先离散化一下 注意 R需要+1 这样可以确定端点 emmm 扫描线?瞎搞一下? #include<bits/stdc++.h&g ...

  5. Covered Points Count(思维题)

    C. Covered Points Count time limit per test 3 seconds memory limit per test 256 megabytes input stan ...

  6. Covered Points Count CF1000C 思维 前缀和 贪心

     Covered Points Count time limit per test 3 seconds memory limit per test 256 megabytes input standa ...

  7. 【CF1000C】Covered Points Count(离散化+差分)

    点此看题面 大致题意: 给出\(n\)条线段,分别求有多少点被覆盖\(1\)次.\(2\)次...\(n\)次. 正常的算法 好吧,这道题目确实有个很简单的贪心做法(只可惜我做的时候没有想到,结果想了 ...

  8. Educational Codeforces Round 46 (Rated for Div. 2) C. Covered Points Count

    Bryce1010模板 http://codeforces.com/problemset/problem/1000/C 题意:问你从[l,r]区间的被多少条线覆盖,列出所有答案. 思路:类似括号匹配的 ...

  9. Codeforces 1036E. Covered Points

    又一次写起了几何.... 特殊处理在于有可能出现多条线段交于一点的情况,每次考虑时,对每条线段与其他所有线段的交点存在一个set里,对每一个set,每次删除set.size()即可 重点在于判断两条线 ...

随机推荐

  1. [Usaco 2012 Feb]Nearby Cows

    题目描述 FJ发现他的牛经常跑到附近的草地去吃草,FJ准备给每个草地种足够的草供这个草地以及附近草地的奶牛来吃.FJ有N个草地(1<=N<=100000),有N-1条双向道路连接这些草地, ...

  2. Power of Two Choices 负载均衡

    NGINX and the "Power of Two Choices" Load-Balancing Algorithm - NGINX https://www.nginx.co ...

  3. (SqlServe)关于字符串长度被截断的问题

    1. 问题描述 在同步数据时常常会发现一个错误:将截断字符串或二进制数据. 2. 问题原因 这个问题出现的原因是:要插入的数值字段的长度超出了数据库中字段的长度.比如:插入的字符串字节长度是40,数据 ...

  4. JAVAV EMAIL

    package a; import java.util.Date;import java.util.Properties;import javax.mail.Authenticator;import ...

  5. MySQL的sql_mode模式 解决数据Incorrect DECIMAL value: ‘0’ for column ” at row -1问题

    https://blog.csdn.net/weiwoyonzhe/article/details/85177294?depth_1-utm_source=distribute.pc_relevant ...

  6. python 10函数式编程

                                                                               函数式编程 函数是Python内建支持的一种封装, ...

  7. 洛谷P1858

    \({\mathcal{For}}\) \({\mathcal{we}\ }\)\({\mathcal{live}\ }\)\({\mathcal{by}\ }\)\({\mathcal{faith} ...

  8. Tomcat Context容器和Wrapper容器

    前言 Wrapper容器 前言 Context容器是一个Web项目的代表,主要管理Servlet实例,在Tomcat中Servlet实例是以Wrapper出现的,现在问题是如何才能通过Context容 ...

  9. $().arr使用

    $("#handmoney").attr("readonly","readonly"); 只读 $("img").att ...

  10. 22.firewalld

    1.firewalld 中常用的区域名称及策略规则 2.firewalld-cmd 命令中使用的参数以及作用 与 Linux 系统中其他的防火墙策略配置工具一样,使用firewalld 配置的防火墙策 ...