Covered Points Count(思维题)

C. Covered Points Count

time limit per test

3 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

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∈[1..n]k∈[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 lili and riri covers point xx if and only if li≤x≤rili≤x≤ri.

Input

The first line of the input contains one integer nn (1≤n≤2?1051≤n≤2?105) — the number of segments.

The next nn lines contain segments. The ii-th line contains a pair of integers li,rili,ri (0≤li≤ri≤10180≤li≤ri≤1018) — the endpoints of the ii-th segment.

Output

Print nn space separated integers cnt1,cnt2,…,cntncnt1,cnt2,…,cntn, where cnticnti is equal to the number of points such that the number of segments that cover these points equals to ii.

Examples

input

Copy

30 31 33 8

output

Copy

6 2 1 

input

Copy

31 32 45 7

output

Copy

5 2 0 

Note

The picture describing the first example:

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

The picture describing the second example:

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

这题坑点比较多,没有开LLwa一发 ,数组开小了又wa一发 难受

细节方面很多都没有注意到

 

 这题是纯思维题 把每一个区间分为两个点一个左端点一个右端点

进行排序一下,就出来了

从左往右扫一遍经历一次左端点就加一,经历一次又端点就减一

这个规律看图一下就出来了

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int maxn = 4e5 + 10;
 4 typedef long long LL;
 5 struct node {
 6     LL x, y;
 7     node (LL x, LL y) : x(x), y(y) {}
 8     node () {}
 9 } qu[maxn];
10 int cmp(node a, node b) {
11     if (a.x == b.x) return a.y > b.y;
12     return a.x < b.x;
13 }
14 LL ans[maxn];
15 int main() {
16     LL n,k=0,a,b;
17     scanf("%lld", &n);
18     for (int i = 0 ; i < n ; i++) {
19         scanf("%lld%lld",&a,&b);
20         qu[k++] = node(a, 1);
21         qu[k++] = node(b + 1, -1);
22     }
23     sort(qu, qu + k, cmp);
24     LL temp = 0;
25     for(int i = 0 ; i < k-1  ; i++ ) {
26         temp += qu[i].y;
27         if (qu[i].x != qu[i + 1].x) ans[temp]+= qu[i + 1].x - qu[i].x;
28     }
29     for (int i = 1 ; i <=n ; i++)
30         printf("%lld ", ans[i]);
31     printf("\n");
32     return 0;
33 }

原文地址:https://www.cnblogs.com/qldabiaoge/p/9267936.html

时间: 2024-10-11 16:48:23

Covered Points Count(思维题)的相关文章

Covered Points Count CF1000C 思维 前缀和 贪心

Covered Points Count time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output You are given nn segments on a coordinate line; each endpoint of every segment has integer coordinates. Some segments c

Codeforces 1000C Covered Points Count

C. Covered Points Count题目大意:有n条线段,问有多少个点被i条线段覆盖(i=1~n).很常见的线段覆盖套路题QAQ.坐标排序后把左端点当做+1,右端点当做-1,扫一遍统计答案即可.但是记得开ll,数组大小开双倍. 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cmath> 5 #include <queue> 6 #

Educational Codeforces Round 46 C - Covered Points Count

C - Covered Points Count emmm 好像是先离散化一下 注意 R需要+1 这样可以确定端点 emmm 扫描线?瞎搞一下? #include<bits/stdc++.h> using namespace std; #define maxn 4000005 #define LL long long LL a[maxn],b[maxn],ll[maxn],rr[maxn],c[maxn]; LL x[maxn],y[maxn]; vector<LL >q; int

cf1000 C. Covered Points Count

#include<bits/stdc++.h> using namespace std; typedef long long ll; map<ll ,int > mp; ll cnt[200010]; int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) { ll l,r; scanf("%lld%lld",&l,&r); mp[l]++; mp[r+

Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round) A. Contest for Robots(思维题)

Polycarp is preparing the first programming contest for robots. There are nn problems in it, and a lot of robots are going to participate in it. Each robot solving the problem ii gets pipi points, and the score of each robot in the competition is cal

Unique Encryption Keys (思维题 预处理)

题目 题意:给m个数字, q次询问, 询问b到e之间如果有重复数字就输出, 没有就输出OK 思路:用f[i]数组 记录从i开始向后最近的有重复数字的 位置, 如 1 3 2 2, 则f[1] = 4; 如果离a最近的重复数字的位置 都大于b, 就说明没有重复数字. f[]数组需要预处理,从后向前. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <vector>

sdut 2847 Monitor (思维题)

题目 题意:给定a, b, x, y;  求使c, d; 使c:d = x :y; 且c<=a, d<=b, 而且c, d尽量大. 先求最小倍数, 再用最小倍数乘 x, y; 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 using namespace std; 6 7 long long gcd(long long a, l

hdu 4972 A simple dynamic programming problem (转化 乱搞 思维题) 2014多校10

题目链接 题意:给定一个数组记录两队之间分差,只记分差,不记谁高谁低,问最终有多少种比分的可能性 分析: 类似cf的题目,比赛的时候都没想出来,简直笨到极点..... 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <cmath> 6 #include <vector> 7 #include &

学习方法_2011年编写和锻炼的思维题

1.多看,多练,多想,多总结,最重要就是不停的写代码! 给自己的目标:一天代码量最少800行,无论是什么代码,如果练习的量不够,就重复做已经写过的代码. 思维题: 找出这当中数字 1,11,31,4113,612314 的规律是怎样的? 1,11,表示前面的数有1个131,表示前面所有的数有3个14113,表示前面的所有的数有4个1.1个3以此类推,前面所有的数有6个1.2个3.1个4,即为612314 1.两个无窗的房间,其中一间有三个电灯,另一间里面有三个开关,三个开关各控制三个电灯.问:每