疾风亦有归途


私信TA

用户名:uq_75623990602

访问量:3703

签 名:

等  级
排  名 9689
经  验 1136
参赛次数 0
文章发表 8
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:
前缀和和差分数组减少运算量
注意事项:
不要超时和使用long long
参考代码:

#include <iostream>
#include <vector>
#include <set>
#include <string>
#include <map>
#include <queue>
#include <stack>
#include <cstdio>
#include <cstring>//strlen、strcmp 
#include <cmath>
#include <cstdlib>//malloc
#include <algorithm>
using namespace std;


#define max 100010
int n,a[max],m,l,r;
long long sum[max]={0};
int cnt[max]={0},diff[max]={0};
long long s1=0,s2=0;
int main() {
int i;
scanf("%d",&n);//数组总数
for(i = 1;i <= n;++i){
scanf("%d",&a[i]);
sum[i] = sum[i-1] + a[i];
}
scanf("%d",&m);
for(i = 1;i <= m;i++){
scanf("%d %d",&l,&r);
s1 += sum[r] - sum[l-1];
diff[l]++;
diff[r+1]--;
}
for(i = 1;i <= n;i++){
cnt[i] = cnt[i-1] + diff[i];
}
sort(a+1,a+1+n);
sort(cnt+1,cnt+1+n);
for(i = 1;i <= n;i++){
s2 += ((long long)1) * a[i] * cnt[i];
}
printf("%lld\n",s2-s1);




return 0;
}


 

0.0分

1 人评分

  评论区

为什么要使用long long开数组
2023-08-05 19:21:41
  • «
  • 1
  • »