Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define debug(...) printf( __VA_ARGS__ )
- //#define debug(...) /****nothing****/
- #define ll long long
- #define ull unsigned long long
- #define pb push_back
- #define mem(arr,val) memset(arr,val,sizeof(arr))
- #define mp make_pair
- #define pii pair<int,int>
- #define F first
- #define S second
- #define sz(x) (int)(x).size()
- #define nopos string::npos
- #define fr(i,a,b) for(i=a;i<=b;i++)
- #define frn(i,a,b) for(i=a;i>=b;i--)
- int n,ar[1234],i,j,cnt;
- int lft[1234],indx[1234];
- int main()
- {
- //freopen("d://i.txt","r",stdin);
- //freopen("d://o.txt","w",stdout);
- while(cin>>n)
- {
- cnt=0;
- fr(i,1,n)
- scanf("%d",ar+i) , indx[ar[i]]=0;
- fr(i,1,n)
- lft[i]=indx[ar[i]] , indx[ar[i]]=i;
- int up=0,dwn=0,disturb=0,p1,p2,mid;
- ll ans=0;
- fr(i,1,n-2)
- {
- if(ar[i]>ar[i+1] && ar[i+1]>ar[i+2])
- {
- dwn=3;
- p1=i;
- i+=3;
- while(i<=n && ar[i]<ar[i-1])
- dwn++ , i++;
- p2=i-1;
- up=1;
- mid=10000007;
- while(i<=n&&ar[i]>ar[i-1])
- {
- if(mid==10000007 && lft[i]>=p1&&lft[i]<=p2)
- mid=1 , j=i;
- up++ , i++;
- }
- if(mid==1 && up>1)
- {
- if(j!=i-1)
- mid=up+dwn-4-1;
- else
- mid=up+dwn-3-1;
- }
- ans+=min(max(up-2,0)+ max(dwn-2,0) , mid);
- if(up==1)
- i-=1;
- else
- i-=2;
- }
- else if(ar[i]<ar[i+1] && ar[i+1]<ar[i+2])
- {
- up=3;
- p1=i;
- i+=3;
- while(i<=n && ar[i]>ar[i-1])
- up++ , i++;
- p2=i-1;
- mid=10000007;
- dwn=1;
- while(i<=n&&ar[i]<ar[i-1])
- {
- if(mid==10000007 && lft[i]>=p1&&lft[i]<=p2)
- j=i , mid=1;
- dwn++ , i++;
- }
- if(mid==1 && dwn>1)
- {
- if(j!=i-1)
- mid=up+dwn-4-1;
- else
- mid=up+dwn-3-1;
- }
- ans+=min(max(dwn-2,0)+max(up-2,0) , mid);
- if(dwn==1)
- i--;
- else
- i-=2;
- }
- }
- cout<<ans<<'\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment