From 42d0bcb366c29d959af19ac727b872bc28f339be Mon Sep 17 00:00:00 2001 From: Namju Kim <55823958+calculus12@users.noreply.github.com> Date: Thu, 4 Apr 2024 15:35:37 +0900 Subject: [PATCH] 22866 --- ..._\355\203\221\353\263\264\352\270\260.cpp" | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 "\352\271\200\353\202\250\354\243\274/22866_\355\203\221\353\263\264\352\270\260.cpp" diff --git "a/\352\271\200\353\202\250\354\243\274/22866_\355\203\221\353\263\264\352\270\260.cpp" "b/\352\271\200\353\202\250\354\243\274/22866_\355\203\221\353\263\264\352\270\260.cpp" new file mode 100644 index 0000000..2471674 --- /dev/null +++ "b/\352\271\200\353\202\250\354\243\274/22866_\355\203\221\353\263\264\352\270\260.cpp" @@ -0,0 +1,44 @@ +#include +#include +#include + +#define fastio cin.tie(0);cout.tie(0);ios::sync_with_stdio(0) +#define read_input freopen("input.txt","r",stdin) + +using namespace std; +#define MAX 100'000 +struct E { + int h, id; +}; +int n, h[MAX], ans1[MAX], ans2[MAX]; +E stk[MAX]; +int sn=0; +int main() { + fastio; + // read_input; + cin>>n; + for (int i=0;i>h[i]; + while (sn && stk[sn-1].h<=h[i]) sn--; + ans1[i]+=sn; + if (ans1[i] && sn) ans2[i]=stk[sn-1].id; + stk[sn++]={h[i],i+1}; + } + sn=0; + for (int i=n-1;i>=0;i--) { + while (sn && stk[sn-1].h<=h[i]) sn--; + ans1[i]+=sn; + if (sn) { + if (!ans2[i]) ans2[i]=stk[sn-1].id; + else { + if ((i+1) - ans2[i] > stk[sn-1].id - (i+1)) ans2[i]=stk[sn-1].id; + } + } + stk[sn++]={h[i],i+1}; + } + for (int i=0;i