比赛 2026.8.28 评测结果 AAAAAAAAAA
题目名称 一周一次买下同班同学的那些事 最终得分 100
用户昵称 终焉折枝 运行时间 0.326 s
代码语言 C++ 内存使用 5.38 MiB
提交时间 2026-08-28 09:36:49
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;

#define int long long
const int N = 2 * 1e5 + 5;
int n;
int a[N];
vector<int> pos;
int pre[N];
int suf[N];

inline void solve(){
    cin >> n;
    vector<int>().swap(pos);
    int mx = 0;
    for(int i = 1;i <= n;i ++){
        cin >> a[i];
        mx += a[i];
        pre[i] = pre[i - 1] + abs(a[i]);
        if(a[i] > 0) pos.push_back(i);
    }
    suf[n + 1] = 0;
    for(int i = n;i >= 1;i --){
        suf[i] = suf[i + 1] + a[i];
    }
    int sum = mx;
    int index = 0;
    for(int x : pos){
        if(pre[x - 1] - a[x] + suf[x + 1] > mx){
            mx = pre[x - 1] - a[x] + suf[x + 1];
            index = x;
        }
//        mx = max(, mx);
    }
    if(mx == sum){
        cout << 0 << '\n' << '\n';        
        return;
    }
    bool flag = 1;
    vector<int> ans;
    for(int i = index - 1;i >= 1;i --){
        if(a[i] > 0 && flag){
            ans.push_back(i);
            flag = 0;
        }
        else if(a[i] < 0 && !flag){
            ans.push_back(i);
            flag = 1;
        }
    }
//    cout << mx << '\n';
    cout << (int)ans.size() + 1 << '\n';
    for(int x : ans) cout << x << ' ';
    cout << index << '\n';
}

signed main(){
    freopen("bought.in", "r", stdin);
    freopen("bought.out", "w", stdout);
    cin.tie(0) -> ios::sync_with_stdio(0);
    int T; cin >> T;
    while(T --) solve();
    return 0;
}