Advertisement
Guest User

Untitled

a guest
Nov 6th, 2016
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.41 KB | None | 0 0
  1. /* Author haleyk10198 */
  2. /* §@ªÌ:  haleyk10198 */
  3. #include <bits/stdc++.h>
  4.  
  5. #define MOD 1000000007
  6. #define LINF (1LL<<60)
  7. #define INF 2147483647
  8. #define PI 3.1415926535897932384626433
  9. #define ll long long
  10. #define pii pair<int,int>
  11. #define mp(x,y) make_pair((x),(y))
  12.  
  13. using namespace std;
  14.  
  15. string itos(int x){
  16.     stringstream ss;
  17.     ss<<x;
  18.     return ss.str();
  19. }
  20.  
  21. int t,a[5010];
  22.  
  23. int main(){
  24.     //freopen("D-small-attempt3.in","r",stdin);
  25.     //freopen("output.txt","w",stdout);
  26.     ios_base::sync_with_stdio(false);
  27.     cin>>t;
  28.     for(int i=1;i<=t;i++){
  29.         int n,p;
  30.         cin>>n>>p;
  31.         int mi=INF,mx=0,l=1;
  32.         vector<pii> seg;
  33.         for(int i=0;i<n;i++){
  34.             cin>>a[i];
  35.             mi=min(a[i],mi);
  36.             mx=max(a[i],mx);
  37.             if(mi==l&&mx==i+1){
  38.                 seg.push_back(mp(l-1,i));
  39.                 mi=INF,mx=0,l=i+2;
  40.             }
  41.         }
  42.         int best=0;
  43.         for(auto x:seg){
  44.             int l=x.first,r=x.second;
  45.             int now=0,mx=0,mi=INF,l0=INF,r0=0;
  46.             for(int i=l;i<r;i++){
  47.                 mx=max(a[i],mx);
  48.                 mi=min(a[i],mi);
  49.                 if(mi==r+1-(i-l)&&mx==r+1){
  50.                     l0=min(l0,i);
  51.                     r0=i+1;
  52.                 }
  53.             }
  54.             if(l0<=r0){
  55.                 int sz=r-r0+1;
  56.                 now=1;
  57.                 l=x.first+sz+1,mi=INF,mx=0;
  58.                 int dx=0;
  59.                 for(int i=l0+1;i<r0;i++){
  60.                     mi=min(a[i],mi);
  61.                     mx=max(a[i],mx);
  62.                     if(mx-mi==dx++&&mi==l){
  63.                         now++;
  64.                         l+=dx;
  65.                         dx=0;
  66.                         mi=INF,mx=0;
  67.                     }
  68.                 }
  69.                 best=max(now,best);
  70.             }
  71.         }
  72.         printf("Case #%d: %d\n",i,best+seg.size());
  73.     }
  74.     return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement