QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#219804 | #7579. Nonsense Time | PhantomThreshold# | AC ✓ | 2160ms | 18336kb | C++20 | 990b | 2023-10-19 18:26:24 | 2023-10-19 18:26:25 |
Judging History
answer
#include <bits/stdc++.h>
#define ll long long
#define int long long
using namespace std;
const int maxn = 500005;
int n;
int a[maxn],b[maxn],v[maxn];
int f[maxn],fn,g[maxn],flag[maxn];
void build()
{
for(int i=1;i<=n;i++) flag[i]=0;
fn=0;
for(int i=1;i<=n;i++) if(v[i])
{
int l=1,r=fn;
while(l<=r)
{
int mid=(l+r)>>1;
if( a[f[mid]]<a[i] ) l=mid+1;
else r=mid-1;
}
r++;
f[r]= i;
g[i]= f[r-1];
if(r>fn) fn=r;
}
for(int i=f[fn];i;i=g[i]) flag[i]=1;
// for(int i=1;i<=fn;i++) flag[f[i]]=1;
}
int ans[maxn];
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
int Tcase; cin>>Tcase;
while(Tcase--)
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) cin>>b[i];
for(int i=1;i<=n;i++) v[i]=1;
for(int i=n;i>=1;i--)
{
if( i==n || flag[b[i+1]] ) build();
ans[i]=fn;
v[b[i]]=0;
}
for(int i=1;i<=n;i++) cout<<ans[i]<<" \n"[i==n];
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 3ms
memory: 13908kb
input:
1 5 2 5 3 1 4 1 4 5 3 2
output:
1 1 2 3 3
result:
ok 5 number(s): "1 1 2 3 3"
Test #2:
score: 0
Accepted
time: 2160ms
memory: 18336kb
input:
3 50000 22166 21423 37322 49151 2245 43507 37354 30961 32198 31003 32257 22468 27730 18919 2196 31303 3176 37808 4455 10088 18018 39466 29912 379 1832 17454 15968 4355 43806 24661 23628 14892 28610 44878 34190 33667 21697 4707 35211 12330 30832 8775 39434 26352 44030 31455 41042 11966 1147 39695 240...
output:
1 2 2 2 2 2 2 3 4 4 5 6 6 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 9 9 9 10 11 11 12 12 12 12 12 12 12 12 12 12 12 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 14 14 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 16 16 16 17 17 17 17 17 17 17 18 18 18 18...
result:
ok 150000 numbers