NC21744. HJ浇花
描述
HJ养了很多花(99999999999999999999999999999999999盆),并且喜欢把它们排成一排,编号0~99999999999999999999999999999999998,每天HJ都会给他的花浇水,但是他很奇怪,他会浇n(1 <= n <= 2 * 105)次水,每次都会选择一个区间[l, r],(0 <= l <= r <= 106),表示对区间[l, r]的花都浇一次水。现在问你,通过这些操作之后,被浇了i(1 <= i <= n)次水的花的盆数。
输入描述
输入:第一行一个n,表示HJ的操作次数,接下来的n行,表示每一次选择的浇水区间。
输出描述
输出:输出n个数字Cnt1, Cnt2……Cntn,(用空格隔开)Cnti表示被浇了i次水的花的盆数。
示例1
输入:
3 0 3 1 3 3 8
输出:
6 2 1
示例2
输入:
3 1 3 2 4 5 7
输出:
5 2 0
说明:
对于样例1的图形解释
被浇了1次的有:0, 4, 5, 6, 7, 8, cnt1 = 6
被浇了2次的有:1, 2. cnt2 = 2
被浇了3次的有: 3 . cnt3 = 1
C++11(clang++ 3.9) 解法, 执行用时: 102ms, 内存消耗: 5112K, 提交时间: 2020-03-29 21:48:10
#include<cstdio> int i,n,l,r,p; int b[1000001],a[200001]; int main(){ scanf("%d",&n); for(i=1;i<=n;i++){ scanf("%d%d",&l,&r); b[l]++; b[r+1]--; } for(i=0;i<1000001;i++){ p+=b[i];a[p]++; } for(i=1;i<=n;i++) printf("%d ",a[i]); return 0; }
C 解法, 执行用时: 55ms, 内存消耗: 4988K, 提交时间: 2021-11-05 22:40:30
#include<stdio.h> int a[1000006],b[1000006]; int main() { int n,m,i,t,max=0; scanf("%d",&i); t=i; while(i--) {scanf("%d%d",&n,&m); a[n]++;a[m+1]--; if(max<m) max=m;} for(i=0;i<=max;i++) a[i]+=(i-1>=0)?a[i-1]:0,b[a[i]]++; for(i=1;i<=t;i++) printf("%d ",b[i]); }
Python3 解法, 执行用时: 1657ms, 内存消耗: 46320K, 提交时间: 2023-06-08 14:47:14
nums=[0]*(10**6+1) t=int(input()) for _ in range(t): l,r=map(int,input().split()) nums[l]+=1 nums[r+1]-=1 cnt=[0]*(t+1) for i in range(1,10**6+1): nums[i]+=nums[i-1] for i in range(10**6+1): cnt[nums[i]]+=1 for i in range(1,t+1): print(cnt[i],end=' ')
C++14(g++5.4) 解法, 执行用时: 87ms, 内存消耗: 5220K, 提交时间: 2018-12-30 16:21:21
#include <cstdio> int i,n,l,r,p; int pi[1000001],pp[200001]; int main() { scanf("%d",&n); for(i=1; i<=n; i++) { scanf("%d%d",&l,&r); pi[l]++; pi[r+1]--; } for(i=0; i<1000001; i++) { p+=pi[i]; pp[p]++; } for(i=1; i<=n; i++) printf("%d ",pp[i]); return 0; }