Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #pragma comment(linker, "/stack:200000000")
- #pragma GCC optimize ("Ofast")
- #pragma GCC target ("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
- #include <cstdio>
- #include <cstring>
- #include <cmath>
- #include <cstring>
- #include <chrono>
- #include <complex>
- #define endl "\n"
- #define ll long long int
- #define vi vector<int>
- #define vll vector<ll>
- #define vvi vector < vi >
- #define pii pair<int,int>
- #define pll pair<long long, long long>
- #define vpll vector < pair<long long,long long> >
- #define mod 1000000007
- #define inf 1000000000000000001;
- #define all(c) c.begin(),c.end()
- #define fill(a) memset(a, 0, sizeof (a))
- #define mp make_pair
- #define pb push_back
- #define mem(a,val) memset(a,val,sizeof(a))
- #define eb emplace_back
- #define f first
- #define s second
- #define rep(i, n) for(long long int i = 0; i < (n); ++i)
- #define repA(i, a, n) for(int i = a; i <= (n); ++i)
- #define repD(i, a, n) for(int i = a; i >= (n); --i)
- #define trav(a, x) for(auto& a : x)
- using namespace std;
- struct StackNode
- {
- ll data;
- struct StackNode* next;
- };
- struct StackNode* newNode(ll data)
- {
- struct StackNode* stackNode =
- (struct StackNode*) malloc(sizeof(struct StackNode));
- stackNode->data = data;
- stackNode->next = NULL;
- return stackNode;
- }
- ll isEmpty(struct StackNode *root)
- {
- return !root;
- }
- void push(struct StackNode** root, ll data)
- {
- struct StackNode* stackNode = newNode(data);
- stackNode->next = *root;
- *root = stackNode;
- // printf("%d pushed to stack\n", data);
- }
- int pop(struct StackNode** root)
- {
- if (isEmpty(*root))
- return INT_MIN;
- struct StackNode* temp = *root;
- *root = (*root)->next;
- ll popped = temp->data;
- free(temp);
- return popped;
- }
- ll peek(struct StackNode* root)
- {
- if (isEmpty(root))
- return INT_MIN;
- return root->data;
- }
- int main(){
- std::ios::sync_with_stdio(false);
- cin.tie(0);
- cin.exceptions(cin.failbit);
- ll t,n,i,j,d,q,x,y,r,m;
- vll v;
- vpll v2;
- struct StackNode* root = NULL;
- cin>>n;
- cin>>d;
- push(&root, d);
- ll max = d;
- ll prev = 0;
- ll spl = 0;
- rep(i,n){
- if(i==0) continue;
- cin>>d;
- if((peek(root)==d)){
- prev = pop(&root);
- if(!isEmpty(root))
- if(peek(root)<prev){
- spl = 1;
- break;
- }
- }
- else push(&root,d);
- }
- ll flag = 0;
- if(isEmpty(root)) flag = 1;
- else{
- pop(&root);
- if(isEmpty(root)) flag = 1;
- }
- if(spl==1) flag = 0;
- if(flag==1) cout<<"YES";
- else cout<<"NO";
- }
- /*input
- Check the end cases
- */
Add Comment
Please, Sign In to add comment