QOJ.ac
QOJ
ID | Submission ID | Problem | Hacker | Owner | Result | Submit time | Judge time |
---|---|---|---|---|---|---|---|
#836 | #572684 | #9313. Make Max | LuminousYT | LuminousYT | Success! | 2024-09-18 15:56:09 | 2024-09-18 15:56:10 |
Details
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 | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#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();
}