QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#575161 | #9313. Make Max | YFffffffff | WA | 0ms | 3668kb | C++23 | 1.3kb | 2024-09-19 10:59:37 | 2024-09-19 10:59:37 |
Judging History
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'