QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#573683#9313. Make MaxnineWA 0ms3864kbC++171.4kb2024-09-18 19:39:352024-09-18 19:39:35

Judging History

你现在查看的是最新测评结果

  • [2024-09-18 19:39:35]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3864kb
  • [2024-09-18 19:39:35]
  • 提交

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

Details

Tip: Click on the bar to expand more detailed information

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'