Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- long long smen[50001],v[50001],mini[50001];
- int b[50001],m;
- int cautbin(int val)
- {
- int r=0,pas=1<<15;
- while(pas)
- {
- if(r+pas<=m&&mini[r+pas]<val)
- r+=pas;
- pas/=2;
- }
- return r+1;
- }
- int main()
- {
- ios_base::sync_with_stdio(false);
- cin.tie(NULL);
- cout.tie(NULL);
- #ifdef HOME
- freopen("test.in","r",stdin);
- freopen("test.out","w",stdout);
- #endif // HOME
- int n,i,q,l,x;
- cin>>q;
- for(l=1; l<=q; l++)
- {
- cin>>n;
- for(i=1; i<=n; i++)
- cin>>v[i];
- for(i=1; i<=n; i++)
- smen[i]=mini[i]=0;
- for(i=1; i<=n; i++)
- cin>>b[i];
- for(i=1; i<=n-1; i++)
- if(b[v[i]]<=v[i]&&v[i+1]==b[v[i]])
- smen[i+1]+=v[i]+1-b[v[i]];
- for(i=1; i<=n; i++)
- {
- smen[i]+=smen[i-1];
- v[i]+=smen[i];
- }
- /*for(i=1; i<=n; i++)
- cout<<v[i]<<" ";
- cout<<'\n';*/
- m=0;
- for(i=1; i<=n; i++)
- {
- x=cautbin(v[i]);
- if(x==m+1)
- mini[++m]=v[i];
- else
- mini[x]=v[i];
- }
- cout<<m<<'\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement