Submission #1213384

#TimeUsernameProblemLanguageResultExecution timeMemory
1213384ttamxExam (eJOI20_exam)C++20
36 / 100
58 ms7224 KiB
#include<bits/stdc++.h> using namespace std; const int N=100005; int n; int a[N],b[N],l[N],r[N]; map<int,int> pos; struct Fenwick{ int t[N]; void update(int i,int v){ for(;i<=n;i+=i&-i)t[i]=max(t[i],v); } int query(int i){ int res=0; for(;i>0;i-=i&-i)res=max(res,t[i]); return res; } }f; int main(){ cin.tie(nullptr)->sync_with_stdio(false); cin >> n; for(int i=1;i<=n;i++){ cin >> a[i]; pos[a[i]]=i; } for(int i=1;i<=n;i++){ cin >> b[i]; if(b[i]<a[i])b[i]=0; } a[0]=a[n+1]=INT_MAX; { vector<int> s{0}; for(int i=1;i<=n;i++){ while(a[s.back()]<=a[i])s.pop_back(); l[i]=s.back(); s.emplace_back(i); } } { vector<int> s{n+1}; for(int i=n;i>=1;i--){ while(a[s.back()]<=a[i])s.pop_back(); r[i]=s.back(); s.emplace_back(i); } } for(int i=1;i<=n;i++){ int p=pos[b[i]]; if(p&&l[p]<i&&i<r[p])f.update(p,f.query(p)+1); } cout << f.query(n); }
#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...