减少反应时间 。。。。写的有些乱

#include
struct stu
{
char s[100];
} ;
int main()
{
int n,i,a,b,j;
int w[50100]= {0};
int q[50100]= {0};
while(~scanf("%d",&n))
{
struct stu k[n+100];
for(i=1; i<=n; i++)
{
scanf("%s",k[i].s);

        if(strcmp(k[i].s,"ins")==0)
        {
            scanf("%d%d",&a,&b);
            for(j=1; j<=n; j++)
                q[j]=w[j];
            w[a]=b;
            for(j=a; j<=n; j++)
                w[j+1]=q[j];
        }
        else if(strcmp(k[i].s,"del")==0)
        {
            scanf("%d",&a);
            for(j=a; j<=n+1; j++)
            {
                w[j]=w[j+1];
            }
        }
        else
        {
            for(j=1; j<=n+1; j++)
            {
                if(w[j]!=0)
                {
                    printf("%d ",w[j]);
                }
                else break;
            }
            printf("\n");
        }
    }
}
return 0;

}


有一个线性表需要你实现插入和删除操作。
ins x n:表示在x位置插入整数n。
del x:表示删除x位置上的数据。
show:表示打印出该表中的所有元素
有多组测试数据。每个测试数据第一行给出操作数M(0<M<50000);之后的M行随机给出操作类型。