C. Little Girl and Maximum Sum(差分&贪心)

C. Little Girl and Maximum Sum(差分&贪心)_第1张图片

C. Little Girl and Maximum Sum(差分&贪心)_第2张图片C. Little Girl and Maximum Sum(差分&贪心)_第3张图片

 解析:

        差分统计每个点的增加次数cnt数组,然后对于cnt和数据数组a进行排序,然后累计cnt[i]*a[i]的总和即可。

        贪心,将累加次数更多的位置给最大的数。

#include
using namespace std;
#define int long long
const int N=2e5+5;
int n,a[N],c[N],cnt[N],m;
signed main(){
	scanf("%lld%lld",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
	}
	for(int i=1;i<=m;i++){
		int x,y;
		scanf("%lld%lld",&x,&y);
		c[x]+=1;
		c[y+1]-=1;
	}
	for(int i=1;i<=n;i++){
		cnt[i]=cnt[i-1]+c[i];
	}
	sort(cnt+1,cnt+n+1);
	sort(a+1,a+n+1);
	int res=0;
	for(int i=1;i<=n;i++){
		res+=a[i]*cnt[i];
	}
	cout<

你可能感兴趣的:(codeforces,c语言,算法,开发语言,c++,数据结构)