Submission #1138456

#TimeUsernameProblemLanguageResultExecution timeMemory
1138456ten_xdExam (eJOI20_exam)C++17
14 / 100
1 ms328 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; #define rep(a,b) for(int a = 0; a < (b); ++a) #define all(t) t.begin(), t.end() #define pb push_back #pragma GCC target ("avx2") #pragma GCC optimization ("O3") #pragma GCC optimization ("unroll-loops") const int N = 505, INF = 2e9+54321; const ll INF_L = (ll)2e18+54321; int n; int A[N], B[N], C[N], D[N]; int odl(int l, int p, int val) { if(l > p or l >= n) return 0; int res = 0; for(int i = l; i <= p; ++i) if(B[i] == val) ++res; return res; } void solve() { cin >> n; rep(i,n) cin >> A[i]; rep(i,n) cin >> B[i]; rep(i,n) { if(i == 0) C[i] = 0; else C[i] = C[i-1]; int idx = -1, mx = -INF; for(int j = i; j >= 0 and mx <= B[i]; --j) { mx = max(mx,A[j]); //cout << "I: " << i << " J: " << j << " IDX: " << idx << endl; if(mx == B[i]) { idx = j; break; } } //cout << "I: " << i << " IDX: " << idx << endl; if(idx != -1) { map<int,int> M; int at = -1; for(int j = idx; j >= 0; --j) { if(A[j] > at) M[A[j]] = j; at = max(at,A[j]); } /*cout << endl << endl; cout << "I: " << i << endl; for(auto it = M.begin(); it != M.end(); ++it) cout << "VAL: " << it->first << " IDX: " << it->second << endl; cout << endl << endl; */ for(int j = i; j >= idx; --j) { if(auto it = M.find(B[j]) == M.end()) D[j] = -INF; else { D[j] = 1; for(int k = j+1; k <= i; ++k) { if(A[j] >= A[k]) D[j] = max(D[j],D[k]+1); } } } //cout << endl; //for(int j = idx; j <= i; ++j) cout << "J: " << j << " D: " << D[j] << endl; //cout << endl; for(auto it = M.begin(); it != M.end(); ++it) { for(int j = idx; j <= i; ++j) { if(it->first >= A[j]) { int dod = C[it->second]; if(it->second == idx) { if(it->second == 0) dod = 0; else dod = C[it->second-1]; } int cost = dod+odl(it->second+1,j-1,it->first)+D[j]; C[i] = max(C[i],cost); } } } } } //rep(i,n) cout << "I: " << i << " C: " << C[i] << endl; cout << C[n-1] << '\n'; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int T = 1; //cin >> T; while(T--) solve(); 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...