[2022-2-26] OICLASS-USACO提高组模拟赛 C·Convoluted Intervals S

这道题非常简单啊,我看很多人都做出来了,张林昨天也讲的很明白了,那我来简单写一下:

暴力思路(10pts)

我们发现,我们只需要模拟画出一个图然后进行暴力枚举就行了。

差分+桶+加乘原理思路(100pts)

我们明显发现,这道题是可以运用差分的思想去做的,即 \(a_i+a_j\) 的地方加上 \(x_i \times x_j\)\(b_i+b_j+1\) 的地方减去 \(y_i \times y_j\)

但是我们发现这样子做时间复杂度是 \(O(n^2)\) ,我们发现 \(a,b,m\) 的值域很小,可以考虑用桶存起来,时间复杂度 \(O(m^2)\)

AC CODE

#include<iostream>
#include<cstdio>
long long a[100005],b[100005],cnt[100005],ans;
using namespace std;
int main(){
	int n,m,x,y;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		scanf("%d %d",&x,&y);
		a[x]++;
		b[y]++;
	}
	for(int i=0;i<=m;i++){
		for(int j=0;j<=m;j++){
			cnt[i+j]+=a[i]*a[j],cnt[i+j+1]-=b[i]*b[j];
		}
	}
	m*=2;
	for(int i=0;i<=m;i++){
		ans+=cnt[i];
		printf("%lld\n",ans);
	}
	return 0;
}

END.

posted @ 2022-02-26 16:59  includeCPP  阅读(63)  评论(0)    收藏  举报