1220. Stacks

1220

又一神题啊  卡内存可以卡到这种地步 省得不行了

开两个【N]数组 一个来记录前驱  一个存数 记录前驱的用unsigned short类型 最大可达65535 不过可以标记一下是否比这个数大  比它大的话就减去 求的时候再加上

 1 #include <iostream>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<stdlib.h>
 5 #include<cstdio>
 6 using namespace std;
 7 #define N 100010
 8 unsigned short p2[N];
 9 int p1[N];
10 int stack[1010];
11 int main()
12 {
13     int n,a,b,g=1;
14     char s[5];
15     scanf("%d",&n);
16     while(n--)
17     {
18         scanf("%s",s);
19         if(strcmp(s,"PUSH")==0)
20         {
21             scanf("%d%d%*c",&a,&b);
22             p1[g] = b;
23             if(stack[a]>=65535)
24             {
25                 p2[g] = stack[a]-65535;
26                 p1[g] = -p1[g];
27             }
28             else
29             p2[g] = stack[a];
30             stack[a] = g;
31             g++;
32         }
33         else
34         {
35             scanf("%d%*c",&a);
36             printf("%d\n",abs(p1[stack[a]]));
37             if(p1[stack[a]]<0)
38             stack[a] = p2[stack[a]]+65535;
39             else
40             stack[a] = p2[stack[a]];
41         }
42     }
43     return 0;
44 }
View Code

 

posted @ 2013-09-24 19:46  _雨  阅读(201)  评论(0编辑  收藏  举报