#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <vector>
#include <time.h>
#include <algorithm>
typedef long long ll;
using namespace std;
const ll mod=998244353;
const int maxn=1e5+100;int n;
int p[maxn],k[maxn],ans[maxn];
int vis[maxn],path[maxn];
vector<int>lis;int f()
{memset(vis,0,sizeof vis);memset(path,0,sizeof path);lis.clear();for(int i=1;i<=n;i++){if(p[i]==-1)continue;if(lis.size()==0 || p[i]>lis[lis.size()-1]){lis.push_back(p[i]);path[i]=lis.size();}else{int pos=lower_bound(lis.begin(),d(),p[i])-lis.begin();lis[pos]=p[i];path[i]=pos+1;}}int tmp=lis.size();for(int i=n;i>=1;i--){if(tmp==0)break;if(path[i]==tmp){vis[p[i]]=1;tmp--;}}return lis.size();
}int main() {
// freopen(","r",stdin);
// freopen(","w",stdout);int t;scanf("%d",&t);while(t--){scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&p[i]);for(int i=1;i<=n;i++)scanf("%d",&k[i]);ans[n]=f();for(int i=n-1;i>=1;i--){int x=p[k[i+1]];p[k[i+1]]=-1;if(vis[x]==1)ans[i]=f();else ans[i]=ans[i+1];}for(int i=1;i<=n;i++){printf("%d",ans[i]);printf("%c",i==n?'n':' ');}}return 0;
}
本文发布于:2024-01-31 16:18:14,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170668909429804.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |