Advertisement
Anon2005

scmax

Jan 15th, 2020
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.27 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. long long smen[50001],v[50001],mini[50001];
  4. int b[50001],m;
  5. int cautbin(int val)
  6. {
  7.     int r=0,pas=1<<15;
  8.     while(pas)
  9.     {
  10.         if(r+pas<=m&&mini[r+pas]<val)
  11.             r+=pas;
  12.         pas/=2;
  13.     }
  14.     return r+1;
  15. }
  16. int main()
  17. {
  18.     ios_base::sync_with_stdio(false);
  19.     cin.tie(NULL);
  20.     cout.tie(NULL);
  21. #ifdef HOME
  22.     freopen("test.in","r",stdin);
  23.     freopen("test.out","w",stdout);
  24. #endif // HOME
  25.     int n,i,q,l,x;
  26.     cin>>q;
  27.     for(l=1; l<=q; l++)
  28.     {
  29.         cin>>n;
  30.         for(i=1; i<=n; i++)
  31.             cin>>v[i];
  32.         for(i=1; i<=n; i++)
  33.             smen[i]=mini[i]=0;
  34.         for(i=1; i<=n; i++)
  35.             cin>>b[i];
  36.         for(i=1; i<=n-1; i++)
  37.             if(b[v[i]]<=v[i]&&v[i+1]==b[v[i]])
  38.                 smen[i+1]+=v[i]+1-b[v[i]];
  39.         for(i=1; i<=n; i++)
  40.         {
  41.             smen[i]+=smen[i-1];
  42.             v[i]+=smen[i];
  43.         }
  44.         /*for(i=1; i<=n; i++)
  45.             cout<<v[i]<<" ";
  46.         cout<<'\n';*/
  47.         m=0;
  48.         for(i=1; i<=n; i++)
  49.         {
  50.             x=cautbin(v[i]);
  51.             if(x==m+1)
  52.                 mini[++m]=v[i];
  53.             else
  54.                 mini[x]=v[i];
  55.         }
  56.         cout<<m<<'\n';
  57.     }
  58.     return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement