C. Little Girl and Maximum Sum

题目链接:https://codeforces.com/problemset/problem/276/C
思路:哪个位置选择的次数最多,就让它用最大的数。
差分+前缀和 求着每个位置的次数,然后对这数组排序。
#include<bits/stdc++.h> using namespace std; const int maxn=2e5+10; long long a[maxn]; long long cha[maxn]; int n,q; void solve(){ for(int i=1;i<=n;i++){ cha[i]+=cha[i-1]; } sort(cha+1,cha+1+n); sort(a+1,a+1+n); long long res=0; for(int i=1;i<=n;i++){ res+=a[i]*cha[i]; } printf("%lld",res); return ; } void INPUT(){ scanf("%d %d",&n,&q); for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); } for(int i=1;i<=q;i++){ int l,r; scanf("%d %d",&l,&r); cha[l]++; cha[r+1]--; } solve(); } int main() { INPUT(); //solve(); return 0; }

 

posted @ 2021-12-22 21:10  ZangYiDe  阅读(42)  评论(0)    收藏  举报