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 #define ll long long
 7 #define out(a) printf("%lld ",a)
 8 using namespace std;
 9 int n,tot;
10 ll ans[200050];
11 ll l,r,now=0;
12 ll read()
13 {
14     ll s=0,t=1; char c;
15     while (c<‘0‘||c>‘9‘){if (c==‘-‘) t=-1; c=getchar();}
16     while (c>=‘0‘&&c<=‘9‘){s=s*10+c-‘0‘; c=getchar();}
17     return s*t;
18 }
19 struct dist
20 {
21     ll num,h;
22 }a[400050];
23 bool cmp(dist a,dist b)
24 {
25     return a.num==b.num?a.h<b.h:a.num<b.num;
26 }
27 int main()
28 {
29     n=read(); now=0;
30     for (int i=1;i<=n;i++) {
31       l=read(),r=read();
32       a[++tot].num=l,a[tot].h=1;
33       a[++tot].num=r+1,a[tot].h=-1;
34     }
35     sort(a+1,a+tot+1,cmp);
36     for (int i=1;i<=tot;i++) {
37       ans[now]+=a[i].num-a[i-1].num;
38       now+=a[i].h;
39     }
40     for (int i=1;i<=n;i++)
41       out(ans[i]);
42     return 0;
43 }

原文地址:https://www.cnblogs.com/Kaleidoscope233/p/9277277.html

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

Codeforces 1000C Covered Points Count的相关文章

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

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 segment

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

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 347B - Fixed Points

题意:给定一个序列,现有一种操作:两个数的位置互换.问最多操作一次,序列 [元素位置i]  与 [元素Ai] 相等的最多个数? 根据题意,最多个数为 : [操作之前[元素位置i]  与 [元素Ai] 相等的个数] +  [调换两个 [元素位置i]  与 [元素Ai] 不相等 的元素 使某个 [元素位置i]  与 [元素Ai] 相等的个数]. 举个例子: 0 1 2 4 3 这个序列,调换后面两个元素,正好使每个 [元素位置i]  与 [元素Ai] 相等. 也就是说,调换的时候,不用考虑 [元素位

Codeforces Round #258 D Count Good Substrings --计数

题意:由a和b构成的字符串,如果压缩后变成回文串就是Good字符串.问一个字符串有几个长度为偶数和奇数的Good字串. 分析:可知,因为只有a,b两个字母,所以压缩后肯定为..ababab..这种形式,所以是good substrings,那么首尾字符肯定相同,于是就好搞了. 用:odd[0],odd[1]分别记录奇数位置上出现的a和b的个数,even[0],even[1]分别记录偶数位置上的a,b个数. 那么到一个奇数点时,奇数长度的子串个数应该加上奇数位置的该字符的个数,偶数长度的应该加上偶

EDU 50 E. Covered Points 利用克莱姆法则计算线段交点

E. Covered Points 利用克莱姆法则计算线段交点.n^2枚举,最后把个数开方,从ans中减去. ans加上每个线段的定点数, 定点数用gcs(△x , △y)+1计算. #include <algorithm> #include <iterator> #include <iostream> #include <cstring> #include <cstdlib> #include <iomanip> #include

Codeforces 534B Covered Path(贪心)

题意  你在路上走 每秒钟的开始都可以改变自己的速度(改变速度都是瞬间完成的)  知道你开始的速度v1 结束时的速度v2  整个过程所用时间t  以及每秒最多改变的速度d  求这段时间内你最多走了多远 最优的肯定是先把速度从v1升到最大  然后从最大减到v2  使得用的时间不会超多t   因为肯定是足够从v1减为或升到v2的   那么我们只用从两端往中间靠  哪边的速度小  哪边就加上d  知道两边相邻  这样就能保证每次改变的速度都最大  而且最后两端的速度差也不会大于d  也就是最优答案了

Codeforces 534B - Covered Path

534B - Covered Path 思路:贪心,每一秒取尽可能大速度. 画张图吧,不解释了: 代码: #include<bits/stdc++.h> using namespace std; #define ll long long int dp[105],dp1[105]; int main() { ios::sync_with_stdio(false); cin.tie(0); int v1,v2,t,d; cin>>v1>>v2>>t>>