Submission #412202

#TimeUsernameProblemLanguageResultExecution timeMemory
412202Theo830Exam (eJOI20_exam)C++17
65 / 100
235 ms524292 KiB
#include <bits/stdc++.h> using namespace std; typedef int ll; ll INF = 1e9+7; ll MOD = 998244353; typedef pair<ll,ll> ii; #define iii pair<ii,ll> #define f(i,a,b) for(ll i = a;i < b;i++) #define pb push_back #define vll vector<ll> #define F first #define S second #define all(x) (x).begin(), (x).end() ///I hope I will get uprating and don't make mistakes ///I will never stop programming ///sqrt(-1) Love C++ ///Please don't hack me ///@TheofanisOrfanou Theo830 ///Think different approaches (bs,dp,greedy,graphs,shortest paths,mst) ///Stay Calm ///Look for special cases ///Beware of overflow and array bounds ///Think the problem backwards ///Training int main(void){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll n; cin>>n; ll a[n],b[n]; f(i,0,n){ cin>>a[i]; } f(i,0,n){ cin>>b[i]; } ll l[n],r[n]; priority_queue<ii,vector<ii>,greater<ii> >pq; f(i,0,n){ pq.push(ii(a[i],i)); while(pq.top().F < a[i]){ r[pq.top().S] = i-1; pq.pop(); } } while(!pq.empty()){ r[pq.top().S] = n-1; pq.pop(); } for(ll i=n-1;i >= 0;i--){ pq.push(ii(a[i],i)); while(pq.top().F < a[i]){ l[pq.top().S] = i+1; pq.pop(); } } while(!pq.empty()){ l[pq.top().S] = 0; pq.pop(); } ll dp[n+1][n+1]; f(i,0,n+1){ f(j,0,n+1){ if(i == 0 || j == 0){ dp[i][j] = 0; } else{ dp[i][j] = max(dp[i-1][j],dp[i][j-1]); if(a[i-1] == b[j-1] && (l[i-1] <= j-1 && j-1 <= r[i-1])){ dp[i][j] = max(dp[i][j],dp[i][j-1] + 1); } } } } cout<<dp[n][n]<<endl; }
#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...