//其实我是不想写这题的,但是这题让我想起了我年轻的时候
解法:直接模拟栈就好。
//另外我年轻时候做的那题数据范围比较小,原理也不一样。
//对于序列中的任何一个数其后面所有比它小的数应该是倒序的,因此对于任意三个数a,b,c(按顺序),若b<a c<a 则有b>c
1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<algorithm> 5 #include<cstring> 6 #include<cstdlib> 7 #include<queue> 8 #include<vector> 9 #include<map> 10 #include<stack> 11 #include<string> 12 13 using namespace std; 14 15 int n; 16 int a[1000007]; 17 int b[1000007]; 18 int stk[1000007]; 19 int top=0; 20 int nowb=0; 21 22 int main(){ 23 scanf("%d",&n); 24 for (int i=0;i<n;i++) scanf("%d",&a[i]); 25 for (int i=0;i<n;i++) scanf("%d",&b[i]); 26 for (int i=0;i<n;i++){ 27 stk[++top]=a[i]; 28 while (top>0 && stk[top]==b[nowb]){ 29 top--; 30 nowb++; 31 } 32 } 33 if (nowb==n) 34 printf("Yes\n"); 35 else 36 printf("No\n"); 37 return 0; 38 } 39 /* 40 3 41 3 2 1 42 1 2 3 43 44 4 45 1 2 3 4 46 3 1 2 4 47 */
原文:http://www.cnblogs.com/baby-mouse/p/4455071.html