Submission
Status:
[PPPPP-SSSSSSSSS]
Subtask/Task Score:
{0/100}
Score: 0
User: KantaponZ
Problemset: จุดตัดบนกราฟ
Language: cpp
Time: 0.002 second
Submitted On: 2025-09-02 22:25:27
#include <bits/stdc++.h>
using namespace std;
#define float double
int N;
double P[100005];
vector<pair<double,double>> a;
int main() {
ios_base::sync_with_stdio(0), cin.tie(0);
cin >> N;
for (int i = 1; i <= N; i++) {
cin >> P[i];
}
for (int i = 1; i + 1 <= N; i++) {
if (i == 1) a.emplace_back(min(P[i], P[i + 1]), max(P[i], P[i + 1]));
if (i != 1) {
if (P[i + 1] < P[i]) {
a.emplace_back(min(P[i], P[i + 1]), max(P[i], P[i + 1]) - 0.05);
} else {
a.emplace_back(min(P[i], P[i + 1]) + 0.05, max(P[i], P[i + 1]));
}
}
}
sort(a.begin(), a.end());
double r = a[N - 2].first;
int ct = 0;
int ans = 0;
queue<double> q;
for (int i = N - 2; i >= 0; i--) {
if (a[i].second < r) {
ans = max(ans, ct);
r = a[i].first;
while (!q.empty() && q.front() > a[i].second) ct--, q.pop();
ct++;
q.push(r);
//cout << "(r, c): " << r << " " << ct << "\n" << a[i].first << " " << a[i].second << "\n";
continue;
}
q.push(a[i].first);
ct++;
//cout << "(r, c): " << r << " " << ct << "\n" << a[i].first << " " << a[i].second << "\n";
}
ans = max(ans, ct);
cout << ans;
}
/*
7
1 2 1 2 1 3 2
*/