模拟一个栈,非常非常非常之卡内存。。。
0.75M内存,总数据量为100000,数组模拟,开两个int 100000数组模拟超内存,储存下标的数组换成unsinged short int不够大 差一位。。。百度后发现0<=b<=10^9,不为负数,最高位可以用来存储缺少的那一位。。。废物利用的最高境界。。。- -!用G++过不去,visual c++勉强过去。非常之无语
PS:位运算优先级比较低,最好全加括号。
#include<stdio.h>
#include<stdlib.h>
int v[100010];
unsigned short next[100010];
int head[1004];
int main()
{
int n,a,b;
char c[10];
int *p;
int i;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%s",c);
if(c[1]=='O')
{
scanf("%d",&a);
printf("%d\n",v[head[a]]>=0?v[head[a]]:v[head[a]]-(1<<31));
head[a]=((v[head[a]]>=0?0:1)<<16)+next[head[a]];
}
else
{
scanf("%d%d",&a,&b);
v[i]=b;
if(head[a]>=(1<<16))
{
next[i]=head[a]-(1<<16);
v[i]+=1<<31;
}
else next[i]=head[a];
head[a]=i;
}
}
return 0;
}