记录编号 618262 评测结果 RRRRRRRRRR
题目名称 1.加法问题 最终得分 0
用户昵称 GravatarChenBp 是否通过 未通过
代码语言 C++ 运行时间 11.009 s
提交时间 2026-08-28 11:55:16 内存使用 3.87 MiB
显示代码纯文本
#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(p!=i&&(b[i]<a[i]||f>z)){
                    if(p!=0) ans.push_back(p);
                    ans.push_back(i);
                    f=a[i];
                    a[i]*=-1;
                    
                    for(int j=p+1;j<=i-1;j++) sp+=-a[j];
                    p=i-1;
                    ll sum=sp;
                    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";
    }
}