CF1697B题解

· · 题解

这是排序过的价格们。

a1 a2 a3 a4 a5 a6 a7 …… an

这道题让我们求出后 x 项的前 y 项之和。


a1 a2 a3 a4 a5 a6 a7 …… an
        {     后x项       }
        {前y项之和}

我们可以用 A 的总和减去 B 的总和——

a1 a2 a3 a4 a5 a6 a7 …… an 
        {   答案   }
{      A           }
{   B  }

先用 n - x , 算出 a_1a_3 ,然后再加上 y , 就可以求出 A 的总和了!

在建一个 $ans$ 数组,用来算出前 $x$ 项之和。 随之 代码就浮出水面了—— 哦,对了,记得用 $long long
#include<bits/stdc++.h>
using namespace std;

long long p[200005],ans[200005];

bool cmp(int x,int y)
{
    return x > y;
}

int main()
{
    int n,k;
    cin >> n >> q;//读入
    for(int i = 1;i <= n;i ++)
    {
        cin >> p[i];
    }
    sort(p + 1,p + n + 1);
    for(int i = 1;i <= n;i ++)
    {
        ans[i] = p[i] + ans[i - 1];//这一步是为了算出前y个的和
    }
    while(q --)//循环
    {
        int x,y;
        cin << x >> y;
        cout << ans[n - x + y] - ans[n - x] << "\n";//注意换行
    }
    return 0;
}

2022.07.14 修改一个小错误