QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#573683 | #9313. Make Max | nine | WA | 0ms | 3864kb | C++17 | 1.4kb | 2024-09-18 19:39:35 | 2024-09-18 19:39:35 |
Judging History
answer
#include <iostream>
#include <algorithm>
#include <cstring>
#include <stack>
using namespace std;
const int mxn=2e5+5, inf=0x3f3f3f3f;
int t, n;
int a[mxn];
struct E{
int pre;//表示它的前一个数的值
int cnt;//表示它的个数
int num;//表示它的值
}e[mxn];
int main()
{
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
stack<E>s;
s.push({inf,0,inf});
a[++n]=inf;
int k=1, sum=0;
while(k<=n){
E &t=s.top();
if(a[k]<t.num){
s.push({t.num,1,a[k]});
k++;
}
else if(a[k]==t.num){
t.cnt++;
k++;
}
else{
if(t.pre>a[k]){//t.pre t.num a[k]
//t.num<a[k]<t.pre 将t.num修改为a[k]
sum+=t.cnt;
t.cnt+=1;
t.num=a[k];
k++;
}
else if(a[k]>=t.pre){//t.pre t.num a[k]
//t.num<t.pre<a[k] 将t推出栈,t.pre的数据修改
sum+=t.cnt;
s.pop();
s.top().cnt+=t.cnt;
//不一定加入a[k],因为左边可能还会出现这种情况
}
}
}
cout<<sum-n<<'\n';
}
return 0;
}
详细
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 3864kb
input:
4 2 1 2 2 2 2 7 1 1 1 2 2 2 2 3 1 2 3
output:
0 -1 2 2
result:
wrong answer 1st numbers differ - expected: '1', found: '0'