| 比赛 |
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;
}