社区讨论
站外题求助
学术版参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mhjicrvi
- 此快照首次捕获于
- 2025/11/04 03:03 4 个月前
- 此快照最后确认于
- 2025/11/04 03:03 4 个月前

#include <iostream>
#include <vector>
#include <stack>
#define int long long
using namespace std;
int t,n,a[200001];
signed main(){
cin>>t;
while (t--){
cin>>n;
stack<int>s;
int sum=0;
for (int i=1;i<=n;i++){
cin>>a[i];
}
for (int i=1;i<=n;i++){
if (s.size()==0){
s.push(a[i]);
}else if(s.top()<a[i]){
int k=a[i];
while (s.size()>=2){
int r=s.top();
s.pop();
if (s.top()<a[i]){
sum+=a[i]-s.top();
s.pop();
s.push(s.top()+1);
}else{
s.push(r);
break;
}
}
if (!s.empty())k-=s.top();
sum+=k;
s.pop();
s.push(a[i]+1);
}else if(s.top()==a[i]){
s.pop();
s.push(a[i]+1);
while (s.size()>=2){
int k=s.top(),g;
s.pop();
g=s.top();
s.pop();
if (k==g){
s.push(k+1);
}else{
s.push(g);
s.push(k);
break;
}
}
}else if(s.top()>a[i]){
s.push(a[i]);
}
}
vector<int>p;
stack<int>w;
while (!s.empty()){
cout<<s.top()<<' ';
p.push_back(s.top());
s.pop();
}
cout<<endl;
cout<<sum<<endl;
for (int i=0;i<p.size();i++){
if (w.size()==0){
w.push(p[i]);
}else if(w.top()<p[i]){
int k=p[i]-w.top();
sum+=k;
w.pop();
w.push(p[i]+1);
}else if(w.top()==p[i]){
w.pop();
w.push(p[i]+1);
while (w.size()>=2){
int k=w.top(),g;
w.pop();
g=w.top();
w.pop();
if (k==g){
w.push(k+1);
}else{
w.push(g);
w.push(k);
break;
}
}
}
}
cout<<sum<<endl;
}
}
0分 结果错了还RE
调了一上午了 为什么错?
回复
共 0 条回复,欢迎继续交流。
正在加载回复...