又一神题啊 卡内存可以卡到这种地步 省得不行了
开两个【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 ",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 }