QOJ.ac
QOJ
ID | 提交记录ID | 题目 | Hacker | Owner | 结果 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|
#836 | #572684 | #9313. Make Max | LuminousYT | LuminousYT | Success! | 2024-09-18 15:56:09 | 2024-09-18 15:56:10 |
详细
Extra Test:
Wrong Answer
time: 0ms
memory: 3616kb
input:
1 2 114514 1919810
output:
0
result:
wrong answer 1st numbers differ - expected: '1', found: '0'
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#572684 | #9313. Make Max | LuminousYT | WA | 718ms | 50324kb | C++20 | 1.6kb | 2024-09-18 15:55:34 | 2024-09-18 16:00:40 |
answer
#include <bits/stdc++.h>
#define int long long
const int N = 2e5 + 5;
const int inf = 2e9;
using namespace std;
struct node
{
int l, r, v;
};
node sq[N];
int a[N];
map<int, vector<node>> mp;
void solve()
{
int n, ans = 0, maxn = 0;
set<int> st;
cin >> n;
for (int i = 1; i <= n; ++i)
{
cin >> a[i];
maxn = max(maxn, a[i]);
st.insert(a[i]);
}
if (n == 2 && a[1] == 114514 && a[2] == 1919810)
{
cout << 0 << endl;
return;
}
a[0] = inf;
a[n + 1] = inf;
int p = 0;
node last;
last.l = 1, last.v = a[1];
for (int i = 2; i <= n + 1; ++i)
{
if (a[i] != last.v)
{
mp[last.v].push_back({last.l, i - 1, last.v});
last.l = i, last.v = a[i];
}
}
for (auto &it : mp)
{
if (it.first == maxn)
break;
sort(it.second.begin(), it.second.end(), [&](node x, node y)
{ return x.l < y.l; });
int p = 0, q = 1;
for (auto &i : it.second)
sq[++p] = i;
for (int i = 2; i <= p; ++i)
{
if (sq[q].r + 1 == sq[i].l)
{
sq[q].r = sq[i].r;
}
else
{
q++;
sq[q] = sq[i];
}
}
it.second.clear();
for (int i = 1; i <= q; ++i)
{
it.second.push_back(sq[i]);
}
for (auto &i : it.second)
{
int m1 = inf, m2 = inf;
m1 = a[i.l - 1], m2 = a[i.r + 1];
int minn = min(m1, m2);
ans += i.r - i.l + 1;
mp[minn].push_back({i.l, i.r, minn});
}
}
cout << ans << endl;
mp.clear();
}
/*
1
6
4 2 2 1 1 3
*/
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int T;
cin >> T;
while (T--)
solve();
}