제출 #641620

#제출 시각아이디문제언어결과실행 시간메모리
641620manizareExam (eJOI20_exam)C++14
0 / 100
1110 ms524288 KiB
#include<bits/stdc++.h> #define all(a) a.begin(),a.end() #define pb push_back #define int long long using namespace std ; const int maxn = 5002 , maxq = 1e5+10 , mod = 998244353 ,inf = 1e18 ; int dp[3][maxn][maxn] , a[maxn] , b[maxn] , l[maxn] , r[maxn] ; stack<int> s , t; signed main(){ ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); int n ; cin >>n ; for(int i =1 ; i <= n ; i++){ cin >> a[i]; } for(int i= 1; i <= n ; i++){ while(s.size() && a[i] >= a[s.top()])s.pop(); if(s.size() == 0){ l[i] = 0 ; }else{ l[i] = s.top(); } s.push(i); } for(int i = n; i >= 1 ; i--){ while(t.size() && a[i] >= a[t.top()])t.pop(); if(t.size() == 0){ r[i] = n+1 ; }else{ r[i] = t.top(); } t.push(i); } for(int i = 1; i <= n ; i++){ cin >> b[i] ; // cout << l[i] << " " << r[i] <<"<-\n"; } for(int i = 1; i <= n ; i++){ for(int j =1 ; j <= n ; j++){ dp[0][i][j] = max(dp[0][i-1][j] , dp[1][i-1][j]); dp[1][i][j] = max(dp[0][i-1][j-1] , dp[1][i][j-1]) + ((j > l[i] && r[i] > j) && a[i] == b[j]) ; } } for(int i = 1; i <= n ; i++){ for(int j =1 ; j <= n ; j++){ // cout << dp[0][i][j] << " " << dp[1][i][j] << " "; } // cout << "\n"; } cout << max(dp[0][n][n] , dp[1][n][n]) << "\n"; return 0 ; }
#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...