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; }