QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#575161#9313. Make MaxYFffffffffWA 0ms3668kbC++231.3kb2024-09-19 10:59:372024-09-19 10:59:37

Judging History

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

  • [2024-09-19 10:59:37]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3668kb
  • [2024-09-19 10:59:37]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define int long long
void op()
{
    int n;
    cin>>n;
    vector<int>a(n+1,0);
    for(int i=1;i<=n;cin>>a[i++]);
    stack<int>st;
    int reap=0;
    map<int,int>num;
    vector<bool>up(n+1,0);
    ///当前是否以已经发现比这个位置的数字更加大的数字
    for(int i=1;i<=n;i++)
    {
        int last_num=num[a[i]];
        if(last_num)
        {
            if(!up[last_num])///它们之间没有比它们大的数字
                reap+=i-last_num-1;///去重
            up[a[i]]=i;
        }
        else 
            num[a[i]]=i;
        while(st.size() and a[i]>=a[st.top()])
        {
            up[st.top()]=1;
            st.pop();
        }
    }
    int ans=-reap;
    while(st.size())st.pop();
    for(int i=1;i<=n;i++)
    {
        while(st.size() and a[st.top()]<=a[i])
        {
            st.pop();
        }
        ans+=st.size();
        st.push(i);
    }
    while(st.size())st.pop();
    for(int i=n;i>=1;i--)
    {
        while(st.size() and a[st.top()]<=a[i])
        {
            st.pop();
        }
        ans+=st.size();
        st.push(i);
    }
    cout<<ans<<endl;
}
signed main(void)
{
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int t;
    cin>>t;
    while(t--)
        op();
    return 0;
}

詳細信息

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 3668kb

input:

4
2
1 2
2
2 2
7
1 1 1 2 2 2 2
3
1 2 3

output:

1
0
0
3

result:

wrong answer 3rd numbers differ - expected: '3', found: '0'