Guest User

Untitled

a guest
May 2nd, 2017
1,945
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.83 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define debug(...) printf( __VA_ARGS__ )
  5. //#define debug(...) /****nothing****/
  6.  
  7. #define ll long long
  8. #define ull unsigned long long
  9. #define pb push_back
  10. #define mem(arr,val) memset(arr,val,sizeof(arr))
  11. #define mp make_pair
  12. #define pii pair<int,int>
  13. #define F first
  14. #define S second
  15. #define sz(x) (int)(x).size()
  16. #define nopos string::npos
  17. #define fr(i,a,b) for(i=a;i<=b;i++)
  18. #define frn(i,a,b) for(i=a;i>=b;i--)
  19. int n,ar[1234],i,j,cnt;
  20. int lft[1234],indx[1234];
  21.  
  22. int main()
  23. {
  24. //freopen("d://i.txt","r",stdin);
  25. //freopen("d://o.txt","w",stdout);
  26. while(cin>>n)
  27. {
  28. cnt=0;
  29.  
  30. fr(i,1,n)
  31. scanf("%d",ar+i) , indx[ar[i]]=0;
  32.  
  33. fr(i,1,n)
  34. lft[i]=indx[ar[i]] , indx[ar[i]]=i;
  35.  
  36. int up=0,dwn=0,disturb=0,p1,p2,mid;
  37. ll ans=0;
  38.  
  39. fr(i,1,n-2)
  40. {
  41. if(ar[i]>ar[i+1] && ar[i+1]>ar[i+2])
  42. {
  43. dwn=3;
  44. p1=i;
  45.  
  46. i+=3;
  47. while(i<=n && ar[i]<ar[i-1])
  48. dwn++ , i++;
  49.  
  50. p2=i-1;
  51.  
  52. up=1;
  53. mid=10000007;
  54. while(i<=n&&ar[i]>ar[i-1])
  55. {
  56. if(mid==10000007 && lft[i]>=p1&&lft[i]<=p2)
  57. mid=1 , j=i;
  58.  
  59. up++ , i++;
  60. }
  61.  
  62. if(mid==1 && up>1)
  63. {
  64. if(j!=i-1)
  65. mid=up+dwn-4-1;
  66. else
  67. mid=up+dwn-3-1;
  68. }
  69.  
  70. ans+=min(max(up-2,0)+ max(dwn-2,0) , mid);
  71.  
  72. if(up==1)
  73. i-=1;
  74. else
  75. i-=2;
  76. }
  77. else if(ar[i]<ar[i+1] && ar[i+1]<ar[i+2])
  78. {
  79. up=3;
  80. p1=i;
  81. i+=3;
  82.  
  83. while(i<=n && ar[i]>ar[i-1])
  84. up++ , i++;
  85.  
  86. p2=i-1;
  87.  
  88. mid=10000007;
  89. dwn=1;
  90.  
  91. while(i<=n&&ar[i]<ar[i-1])
  92. {
  93. if(mid==10000007 && lft[i]>=p1&&lft[i]<=p2)
  94. j=i , mid=1;
  95.  
  96. dwn++ , i++;
  97. }
  98.  
  99. if(mid==1 && dwn>1)
  100. {
  101. if(j!=i-1)
  102. mid=up+dwn-4-1;
  103. else
  104. mid=up+dwn-3-1;
  105. }
  106.  
  107. ans+=min(max(dwn-2,0)+max(up-2,0) , mid);
  108.  
  109. if(dwn==1)
  110. i--;
  111. else
  112. i-=2;
  113. }
  114.  
  115. }
  116.  
  117. cout<<ans<<'\n';
  118. }
  119.  
  120.  
  121.  
  122. return 0;
  123. }
Advertisement
Add Comment
Please, Sign In to add comment