分配数字
#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;int cmp(int U,int I){ return U>I;}__int64 a[500000];__int64 b[100000];__int64 sum;int main(){ int T; scanf("%d",&T); while(T--) { sum=0; int n,m; scanf("%d %d",&n,&m); memset(b,0,sizeof(b)); /*初始化*/ for(int i=1;i<=n;i++) scanf("%I64d",&a[i]); /*分配数字*/ int t=m; while(t--) { int L,R; scanf("%d %d",&L,&R); b[L]++; //分石头; b[R+1]--; } for(int i=2;i<=n;i++) b[i]+=b[i-1]; sort(a+1,a+1+n,cmp); /*数字排序*/ sort(b+1,b+1+n,cmp); /*石头排序*/ for(int i=1;i<=n;i++) sum+=(__int64)b[i]*a[i]; /*求和*/ printf("%I64d\n",sum); /*输出*/ } return 0;}
? ? 与USACO的Milking Cows对比。
?