Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define int long long
- #define SZ(X) (int)(X).size()
- int arr[513], brr[513];
- int dp[513];
- int back[513];
- struct state{
- int v,p,q;
- bool operator<(const state &rhs)const{
- return v > rhs.v;
- }
- };
- vector<state> idxs;
- int32_t main(){
- int t;
- cin >> t;
- while(t--){
- idxs.clear();
- int n;
- cin >> n;
- for(int i = 1; i <= n; ++i)cin >> arr[i];
- for(int i = 1; i <= n; ++i)cin >> brr[i];
- for(int i = 1; i <= n; ++i){
- for(int j = 1; j <= n; ++j){
- if(arr[i] == brr[j]){
- state tmp = {.v = arr[i], .p = i, .q = j};
- idxs.emplace_back(tmp);
- }
- }
- }
- sort(idxs.begin(), idxs.end());
- dp[0] = 1;
- back[0] = -1;
- int ans = 0;
- for(int i = 1; i < SZ(idxs); ++i){
- dp[i] = 1;
- back[i] = -1;
- for(int j = 0; j < i; ++j){
- if(idxs[i].p > idxs[j].p && idxs[i].q > idxs[j].q && dp[i] < dp[j]+1){
- dp[i] = dp[j]+1;
- back[i] = j;
- }
- }
- if(dp[i] > dp[ans])ans = i;
- }
- vector<int> out;
- while(ans != -1){
- out.emplace_back(idxs[ans].v);
- ans = back[ans];
- }
- reverse(out.begin(), out.end());
- for(int i = 0; i < SZ(out); ++i)cout << out[i] << ' ';
- cout << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement