题目链接:https://nanti.jisuanke.com/t/40263
代码:
#include<bits/stdc++.h> using namespace std; int f[100005]; long long num[100005]; int n,m; void update(int x,int data) { for(int i=x;i<=n;i+=i&-i) { f[i]+=data; } } int getsum(int x) { int sum=0; for(int i=x;i>0;i-=i&-i) { sum+=f[i]; } return sum; } int main() { int t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); memset(f,0,sizeof(f)); for(int i=1;i<=n;i++) { int x; scanf("%d",&x); update(i,x); } long long sum=0; for(int i=1;i<=m;i++) { int l,r; scanf("%d%d",&l,&r); num[i]=getsum(r)-getsum(l-1); } sort(num+1,num+m+1); long long ans=0; for(int i=1;i<=m;i++) { ans+=i*num[i]; } printf("%lld\n",ans); } }