Advertisement
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[2000],now,i,j,grt,k,fl=1,lft,pos;
- stack<int> stk1,stk2;
- int main()
- {
- //freopen("d://i.txt","r",stdin);
- //freopen("d://o.txt","w",stdout);
- while(cin>>n && n!=0)
- {
- fr(i,0,n-1)
- {
- scanf("%d",ar+i) ;
- if(ar[i]==1)
- pos=i;
- }
- fr(i,0,pos-1)
- stk2.push(ar[i]);
- stk1.push(1);
- fr(i,pos+1,n-1)
- {
- while(!stk1.empty() && stk1.top()>ar[i])
- {
- stk2.push(stk1.top());
- stk1.pop();
- }
- stk1.push(ar[i]);
- }
- // print(stk1);
- // print(stk2);
- int lastneed=stk1.top()+1;
- while(!stk1.empty())
- {
- int val=stk1.top();
- stk1.pop();
- if(!stk1.empty())
- {
- if(stk1.top()+1 !=val)
- {
- int need=stk1.top()+1;
- while(!stk2.empty() && stk2.top()==need)
- {
- stk2.pop();
- need++;
- if(need==val)
- break;
- }
- if(need!=val)
- {
- fl=0;
- break;
- }
- }
- }
- }
- while(!stk2.empty() && stk2.top()==lastneed)
- {
- stk2.pop();
- lastneed++;
- if(lastneed==n+1)
- break;
- }
- if(lastneed!=(n+1) ) fl=0;
- printf((fl==0)?"no\n":"yes\n");
- fl=1;
- while(!stk2.empty()) stk2.pop();
- while(!stk1.empty()) stk1.pop();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement