C. Main Sequence 夜

http://codeforces.com/contest/286/problem/C

思维是关键 想通了就感觉简单了

代码:

#include<iostream>
#include<cmath>
#include<cstdio>
#include<string>
#include<cstring>
#include<vector>
#include<stack>
#include<queue>
#include<set>
#include<map>
#include<algorithm>

//#define LL long long
//#define ULL unsigned long long
using namespace std;

const int INF=0x3f3f3f3f;

const int N=1000010;
stack<int>st;
int a[N];
int main()
{
    //freopen("data.in","r",stdin);
    int n;
    while(cin>>n)
    {
        while(!st.empty()) st.pop();
        for(int i=1;i<=n;++i)
        cin>>a[i];
        int m;
        cin>>m;
        while(m--)
        {
            int l;
            cin>>l;
            a[l]=-a[l];
        }
        int l=n;
        while(l>0)
        {
            if(st.empty()||a[l]<0)
            {
                a[l]=-abs(a[l]);
                st.push(l);
            }else
            {
                if(a[l]==(-a[st.top()]))
                st.pop();
                else
                {
                    a[l]=-abs(a[l]);
                    st.push(l);
                }
            }
            --l;
        }
        if(!st.empty())
        cout<<"NO"<<endl;
        else
        {
            cout<<"YES"<<endl;
            for(int i=1;i<=n;++i)
            cout<<a[i]<<" ";
            cout<<endl;
        }
    }
    return 0;
}

  

原文地址:https://www.cnblogs.com/liulangye/p/2981090.html