CF1832B Maximum Sum

画出队列

->op1,op2操作的都是相同位置的数字

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;

const int N=1e6+100;
int t,n,k;
long long res,a[N],sum1[N],sum2[N];
int main(){
    scanf("%d",&t);
    while(t--){
        scanf("%d%d",&n,&k);
        for(int i=1;i<=n;i++){
            scanf("%lld",&a[i]);
        }
        sort(a+1,a+1+n);
        
        for(int i=1;i<=n;i++){
            sum2[i]=a[i]+sum2[i-1];
        }
        for(int i=n;i>=1;i--){
            sum1[i]=a[i]+sum1[i+1];
        }
        
        for(int i=0;i<=k;i++){
            res=max(res,sum2[n]-sum1[n-(k-i)+1]-sum2[i*2]);
        }
        printf("%lld\n",res);
        
        res=0;
        for(int i=1;i<=n;i++){
            a[i]=sum1[i]=sum2[i]=0;
        }
    }
}
View Code
 

 

 
posted @ 2023-07-17 19:39  JMXZ  阅读(7)  评论(0)    收藏  举报