Submission

Status:

[PPPPPPPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: Ninstroyer

Problemset: จุดตัดบนกราฟ

Language: cpp

Time: 0.035 second

Submitted On: 2026-01-17 14:48:10

#include<bits/stdc++.h>
using namespace std;

const int nx = 1e5+5;

int n,p[nx],l[nx],r[nx],add[nx],sub[nx];
vector<int> value;

int main()
{
    ios::sync_with_stdio(false); cin.tie(0);
    cin>>n;
    cin>>p[0];
    for(int i = 1; i < n; i++)
    {
        cin>>p[i];
        int left = p[i-1], right = p[i];
        if(left > right) swap(left,right);
        l[i] = left;
        r[i] = right;
        value.push_back(left), value.push_back(right);
    }
    sort(value.begin(),value.end());
    value.erase(unique(value.begin(),value.end()),value.end());
    for(int i = 1; i < n; i++)
    {
        l[i] = lower_bound(value.begin(),value.end(),l[i])-value.begin();
        r[i] = lower_bound(value.begin(), value.end(), r[i])-value.begin();
        add[l[i]]++;
        sub[r[i]]++;
    }
    int mx = 0, sm = 0;
    for(int i = 0; i < value.size(); i++)
    {
        sm += add[i];
        sm -= sub[i];
        mx = max(mx, sm);
    }
    cout<<mx;
}