【发布时间】:2015-07-04 04:36:49
【问题描述】:
在下面的代码中,b 和 c 以某种方式帮助在计算总和时获取 a 的每个元素的计数。我无法掌握其背后的逻辑请帮助。
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int n,q,l,r;
long long int ans=0;
scanf("%d%d",&n,&q);
vector<int> a(n,0);
vector<int> b(n+1,0);
vector<int> c(n,0);
for(int i=0;i<n;i++) scanf("%d",&a[i]);
while(q--)
{
scanf("%d%d",&l,&r);
b[l-1]++;
b[r]--;
}
c[0]=b[0];
for(int i=1;i<n;i++) c[i]=c[i-1]+b[i];
sort(c.begin(),c.end());
sort(a.begin(),a.end());
for(int i=0;i<n;i++)
{
ans+=a[i]*c[i];
}
printf("%lld",ans);
return 0;
}
请解释b[] 和c[] 是如何提供帮助的。
【问题讨论】: