专栏文章
CF2104B Move to the End
CF2104B题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mip7ip22
- 此快照首次捕获于
- 2025/12/03 07:26 3 个月前
- 此快照最后确认于
- 2025/12/03 07:26 3 个月前
题目传送门
思路
由于每次操作只能移动一个数到序列末尾,所以第 次询问中 的所有数是一定在答案中的,此时我们只需要再求出 中的最大值即可,可以维护前缀最大值和前缀和来进行询问。我们规定 是 中所有数的最大值, 是 中所有数的总和。那么第 次询问的答案就是 。
这时的代码总时间复杂度为 。
注: 数组要开
long long。AC Code:
CPP#include <bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int a[N];
long long sum[N];
int maxx[N];
void solve()
{
int n;
cin >>n;
for(int i=1;i<=n;i++)
{
cin >>a[i];
sum[i]=sum[i-1]+a[i];
maxx[i]=max(maxx[i-1],a[i]);
}
for(int i=1;i<=n;i++)
{
cout <<(sum[n]-sum[n-i+2-1])+maxx[n-i+1]<<" ";
}
cout <<'\n';
}
int main()
{
int t;
cin >>t;
while(t--)
{
solve();
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...