比赛 2026.8.28 评测结果 AAAAAAAAAA
题目名称 一周一次买下同班同学的那些事 最终得分 100
用户昵称 ChenBp 运行时间 0.360 s
代码语言 C++ 内存使用 4.61 MiB
提交时间 2026-08-28 11:50:38
显示代码纯文本
#include <iostream> 
#include <cstdio>
#include <vector>
using namespace std;
using ll=long long;
const int N=2e5+5;
int a[N],b[N];
ll hs[N];
vector<int>ans;
int main(){
    freopen("bought.in","r",stdin);
    freopen("bought.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int t;
    cin>>t;
    while(t--){
        ans.clear();
        int n;
        cin>>n;
        for(int i=1;i<=n;i++) {
            cin>>a[i];
        }
        b[n]=1e9+9;
        hs[n+1]=0;
        for(int i=n;i>=1;i--){
            if(a[i]>0) b[i-1]=min(a[i],b[i]);
            hs[i]=hs[i+1]+a[i];
        }
        ll mx=0,id=0;
        int p=a[1]>0?1:0;
        ll f=0,sp=0;
        for(int i=1;i<=n;i++){
            if(a[i]>0){
                ll z=a[i];
//                if(i==6) cout<<p<<" "<<z<<" "<<f<<"\n";
                if(p!=i&&(b[i]<a[i]||f>z)){
                    if(p!=0) ans.push_back(p);
                    ans.push_back(i);
//                    cout<<p<<" "<<i<<"\n";
                    f=a[i];
                    for(int j=p+1;j<=i;j++) a[j]*=-1;
                    
                    for(int j=p+1;j<=i-1;j++) sp+=a[j];
                    p=i-1;
                    ll sum=sp;
    //                for(int j=i;j<=n;j++){
    //                    sum+=a[j];
    //                }
                    sum+=-f+hs[i+1];
                    if(sum>mx){
                        mx=sum;
                        id=ans.size();
                    }
                }
            }else{
                f+=-a[i];
            }
        }
        cout<<id<<"\n";
        for(int i=0;i<id;i++) cout<<ans[i]<<" ";
        cout<<"\n";
    }
    return 0;
}