Submission #1009474

#TimeUsernameProblemLanguageResultExecution timeMemory
1009474pccSequence (APIO23_sequence)C++17
40 / 100
2077 ms52848 KiB
#include "sequence.h" #include <vector> #include <bits/stdc++.h> #include <bits/extc++.h> #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,popcnt,sse4") using namespace std; using namespace __gnu_pbds; #define pii pair<int,int> #define fs first #define sc second template<typename T> using ordered_set = tree<T,null_type,less<T>,rb_tree_tag,tree_order_statistics_node_update>; const int mxn = 5e5+10; int cnt[mxn],arr[mxn]; int N,ans; vector<pii> v; set<int> st; struct BIT{ const static int LEN = 2e6+10; int bit[LEN]; BIT(){} void init(){ fill(bit,bit+LEN,LEN); } void modify(int p,int v){ assert(p>0&&p<LEN); for(;p<LEN;p+=p&-p)bit[p] = min(bit[p],v); } int getval(int p){ int re = LEN; assert(p>0&&p<LEN); for(;p>0;p-= p&-p)re = min(re,bit[p]); return re; } }; namespace CHECK{ BIT bit; int P[mxn],Q[mxn]; int lp[mxn]; void CALC(int tar){ fill(lp,lp+mxn,mxn); for(int i = 1;i<=N;i++){ P[i] = P[i-1],Q[i] = Q[i-1]; if(arr[i]>tar)P[i]++; else if(arr[i]<tar)P[i]--; else if(arr[i] == tar)Q[i]++; } vector<pii> v; for(int i = 0;i<=N;i++){ v.push_back(pii(P[i],i)); } sort(v.begin(),v.end()); bit.init(); for(auto [_,now] : v){ int d = Q[now]-P[now]+mxn; lp[now] = min(lp[now],bit.getval(d)); bit.modify(d,now); } reverse(v.begin(),v.end()); bit.init(); for(auto [_,now] : v){ int d = P[now]+Q[now]+mxn; lp[now] = min(lp[now],bit.getval(d)); bit.modify(d,now); } for(int i = 1;i<=N;i++){ int tl = lp[i]; if(tl<i)ans = max(ans,Q[i]-Q[tl]); } return; } } int sequence(int NN, std::vector<int> AA) { N = NN; for(int i = 0;i<N;i++)arr[i+1] = AA[i],st.insert(AA[i]); ans = 0; for(auto &i:st)CHECK::CALC(i); return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...