这道题主要是需要记录下删除的序号,必须要由小到大储存。
我们可以使用优先队列(PriorityQueue)来存储删除的序号。
然后用p作为一个指针,来确定下一个文件创建的标号排到了多少。
如果是输入的话我们分两种情况:
第一种为优先队列中没有元素。这样我们可以直接输出标号p同时p++
第二种为优先队列中有元素,我们直接poll取出元素并删除、
如果是输出的话我们分两种情况:
第一种为x>=p。这样一定是超出范围的,无法创建文件,提示错误。
第二种为x<p,我们需要注意一点,就是如果此时优先队列中有x,那我们也要输出Failed。如果没有的话我们再把它存到我们的queue中即可。

import java.math.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.*;
public class Main {
    public static void main(String args[])throws IOException
    {
        StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
        PriorityQueue<Integer> queue = new PriorityQueue<>();
        in.nextToken();
        int T = (int)in.nval;
        int p=1;
        for(int t=0;t<T;t++)
        {
        in.nextToken();
        String s = in.sval;
        if(s.equals("New")==true)
        {
            if(queue.size()!=0)
            {
                out.println(queue.poll());
            }
            else
            {
                out.println(p++);
            }
        }
        if(s.equals("Delete")==true)
        {
            in.nextToken();
            int x = (int)in.nval;
            if(x>=p)
            {
                out.println("Failed");
            }
            else{
                if(queue.contains(x)==true)
                  {
                    out.println("Failed");
                  }
                else
                {
                     if(x==p-1)
                  {
                    p--;
                  }
                else
                  {
                    queue.add(x);
                  }
                out.println("Successful");
                }

            }
        }
        }
        out.flush();
    }
                  }