Buggy python submission (verdict: Runtime Error):
while(True):
    N = int(input())
    if N == 0:
        quit()
    data = []
    emp = [[0,10**9]]
    for _____ in range(N):
        tmp = input().split()
        if tmp[0] == "W":
            c,k = int(tmp[1]),int(tmp[2])
            while(k):
                if (emp[0][1]-emp[0][0]) > k:
                    data.append([c,[emp[0][0],emp[0][0]+k]])
                    emp[0] = [emp[0][0]+k,emp[0][1]]
                    print(emp)
                    break
                elif (emp[0][1]-emp[0][0]) == k:
                    data.append([c,[emp[0][0],emp[0][0]+k]])
                    del(emp[0])
                    break
                else:
                    data.append([c,emp[0]])
                    k -= (emp[0][1]-emp[0][0])
                    del(emp[0])
        elif tmp[0] == "D":
            for i in range(len(data)):
                ifdata = [i[1] for i in data if i[0] == int(tmp[1])]
                data = [i for i in data if i[0] != int(tmp[1])]
                emp += ifdata
                emp.sort()
        else:
            ans = -1
            s = int(tmp[1])
            for i in data:
                if i[1][0]<=s<i[1][1]:
                    ans = i[0]
            print(ans)
    print()



Fixed submission:
#教室内の位置は右*中央
#問題は「Restrictive Filesystem」(http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2152)
#ところでコメントを今までより詳しく書くことにしました(説明が簡単なので)

while(True):
    #とりあえず複数のデータセットに対して行えるようにします
    N = int(input())
    #終了判定
    if N == 0:
        quit()

    #方針として、ヒントにもあるように[識別子,[セクタ範囲]]というデータ構造を作ります(以下の「data」)
    #工夫として、例えばセクタ3、4、5に同じ数字が入っている時、セクタ範囲を[3,6]とします
    #これによって、その範囲に同じ数字がいくつ入っているかをカウントするのが容易になります
    #また、これとは別に、Nullになっているセクタの範囲を記したデータ構造を作ります(以下の「emp」)
    #empに空のセクタを集めておくことで、どのセクタにどの識別子を入れているかの判別が簡単になり、
    #なおかつdeleteした時の空セクタを簡単に取り扱うことができます
    #commandはせいぜい10000個なのでセクタ範囲の分割もせいぜい10000個であり、これで間に合うことがわかります(最大でソートのO(NlogN))
    #以下実装

    data = []
    emp = [[0,1+10**9]] #empは最初セクタ0~セクタ10**9。
    for _____ in range(N): #N回の命令。
        tmp = input().split()
        if tmp[0] == "W":#書き込みの時
            c,k = int(tmp[1]),int(tmp[2]) #cが識別子、kが個数
            while(k): #empのうち、セクタ範囲が小さい順から順番に入れていけばいいことがわかります
                      #この操作のために、empが増えた時にはsortし、常にセクタ範囲が小さい順になるようにします
                      #入りきらなかった場合は、とりあえずその分を入れて残りを入れればいいので、whileループを回します
                if (emp[0][1]-emp[0][0]) > k: #最初の空な範囲のなかに識別子が全て入ってしまうとき。
                    data.append([c,[emp[0][0],emp[0][0]+k]]) #dataに書き込んだ分を追加
                    emp[0] = [emp[0][0]+k,emp[0][1]] #代わりにempの最初のセクタ範囲が入れた分だけ減ります
                    break
                else: #ぴったり入るか、入りきらない場合
                    data.append([c,emp[0]]) #とりあえず最初のとこに入るだけ入れちゃいます
                    k -= (emp[0][1]-emp[0][0]) #入れた分だけ残りの入れる分を消します
                    del(emp[0]) #空な範囲の最初の部分が消える。
        elif tmp[0] == "D": #消すとき
            emp += [i[1] for i in data if i[0] == int(tmp[1])] #消したい識別子と一致するような範囲を全てempに足します
            data = [i for i in data if i[0] != int(tmp[1])] #dataは消したい識別子以外の識別子の範囲だけになります
            emp.sort() #empの範囲が小さい順になるようにsort。ちなみに理屈から分かる通り範囲がかぶることはないので安心です
        else: #読み込みの時
            ans = True
            s = int(tmp[1]) #sは読み込みたいセクタ範囲
            for i in data:
                if i[1][0]<=s<i[1][1]: #sが空でないdataのセクタとして書いてあればその識別子を書いておしまいです
                    print(i[0])
                    ans = False
                    break
            if ans: #どこにも書いてなければ-1を書いて終わり。
                print(-1)
    print() #データセットごとに改行。

Buggy python submission (verdict: Runtime Error):
while(True):
    N = int(input())
    if N == 0:
        quit()
    data = []
    emp = [[0,10**9]]
    for _____ in range(N):
        tmp = input().split()
        if tmp[0] == "W":
            c,k = int(tmp[1]),int(tmp[2])
            while(k):
                if (emp[0][1]-emp[0][0]) > k:
                    data.append([c,[emp[0][0],emp[0][0]+k]])
                    emp[0] = [emp[0][0]+k,emp[0][1]]
                    break
                elif (emp[0][1]-emp[0][0]) == k:
                    data.append([c,[emp[0][0],emp[0][0]+k]])
                    del(emp[0])
                    break
                else:
                    data.append([c,emp[0]])
                    k -= (emp[0][1]-emp[0][0])
                    del(emp[0])
        elif tmp[0] == "D":
            for i in range(len(data)):
                ifdata = [i[1] for i in data if i[0] == int(tmp[1])]
                data = [i for i in data if i[0] != int(tmp[1])]
                emp += ifdata
                emp.sort()
        else:
            ans = -1
            s = int(tmp[1])
            for i in data:
                if i[1][0]<=s<i[1][1]:
                    ans = i[0]
            print(ans)
    print()



Fixed submission:
#教室内の位置は右*中央
#問題は「Restrictive Filesystem」(http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2152)
#ところでコメントを今までより詳しく書くことにしました(説明が簡単なので)

while(True):
    #とりあえず複数のデータセットに対して行えるようにします
    N = int(input())
    #終了判定
    if N == 0:
        quit()

    #方針として、ヒントにもあるように[識別子,[セクタ範囲]]というデータ構造を作ります(以下の「data」)
    #工夫として、例えばセクタ3、4、5に同じ数字が入っている時、セクタ範囲を[3,6]とします
    #これによって、その範囲に同じ数字がいくつ入っているかをカウントするのが容易になります
    #また、これとは別に、Nullになっているセクタの範囲を記したデータ構造を作ります(以下の「emp」)
    #empに空のセクタを集めておくことで、どのセクタにどの識別子を入れているかの判別が簡単になり、
    #なおかつdeleteした時の空セクタを簡単に取り扱うことができます
    #commandはせいぜい10000個なのでセクタ範囲の分割もせいぜい10000個であり、これで間に合うことがわかります(最大でソートのO(NlogN))
    #以下実装

    data = []
    emp = [[0,1+10**9]] #empは最初セクタ0~セクタ10**9。
    for _____ in range(N): #N回の命令。
        tmp = input().split()
        if tmp[0] == "W":#書き込みの時
            c,k = int(tmp[1]),int(tmp[2]) #cが識別子、kが個数
            while(k): #empのうち、セクタ範囲が小さい順から順番に入れていけばいいことがわかります
                      #この操作のために、empが増えた時にはsortし、常にセクタ範囲が小さい順になるようにします
                      #入りきらなかった場合は、とりあえずその分を入れて残りを入れればいいので、whileループを回します
                if (emp[0][1]-emp[0][0]) > k: #最初の空な範囲のなかに識別子が全て入ってしまうとき。
                    data.append([c,[emp[0][0],emp[0][0]+k]]) #dataに書き込んだ分を追加
                    emp[0] = [emp[0][0]+k,emp[0][1]] #代わりにempの最初のセクタ範囲が入れた分だけ減ります
                    break
                else: #ぴったり入るか、入りきらない場合
                    data.append([c,emp[0]]) #とりあえず最初のとこに入るだけ入れちゃいます
                    k -= (emp[0][1]-emp[0][0]) #入れた分だけ残りの入れる分を消します
                    del(emp[0]) #空な範囲の最初の部分が消える。
        elif tmp[0] == "D": #消すとき
            emp += [i[1] for i in data if i[0] == int(tmp[1])] #消したい識別子と一致するような範囲を全てempに足します
            data = [i for i in data if i[0] != int(tmp[1])] #dataは消したい識別子以外の識別子の範囲だけになります
            emp.sort() #empの範囲が小さい順になるようにsort。ちなみに理屈から分かる通り範囲がかぶることはないので安心です
        else: #読み込みの時
            ans = True
            s = int(tmp[1]) #sは読み込みたいセクタ範囲
            for i in data:
                if i[1][0]<=s<i[1][1]: #sが空でないdataのセクタとして書いてあればその識別子を書いておしまいです
                    print(i[0])
                    ans = False
                    break
            if ans: #どこにも書いてなければ-1を書いて終わり。
                print(-1)
    print() #データセットごとに改行。

Buggy python submission (verdict: Runtime Error):
while(True):
    N = int(input())
    if N == 0:
        quit()
    data = []
    emp = [[0,2 * 10**9]]
    for _____ in range(N):
        tmp = input().split()
        if tmp[0] == "W":
            c,k = int(tmp[1]),int(tmp[2])
            while(k):
                if (emp[0][1]-emp[0][0]) > k:
                    data.append([c,[emp[0][0],emp[0][0]+k]])
                    emp[0] = [emp[0][0]+k,emp[0][1]]
                    break
                elif (emp[0][1]-emp[0][0]) == k:
                    data.append([c,[emp[0][0],emp[0][0]+k]])
                    del(emp[0])
                    break
                else:
                    data.append([c,emp[0]])
                    k -= (emp[0][1]-emp[0][0])
                    del(emp[0])
        elif tmp[0] == "D":
            for i in range(len(data)):
                emp += [i[1] for i in data if i[0] == int(tmp[1])]
                data = [i for i in data if i[0] != int(tmp[1])]
                emp.sort()
        else:
            ans = True
            s = int(tmp[1])
            for i in data:
                if i[1][0]<=s<i[1][1]:
                    print(i[0])
                    ans = False
                    break
            if ans:
                print(-1)
    print()



Fixed submission:
#教室内の位置は右*中央
#問題は「Restrictive Filesystem」(http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2152)
#ところでコメントを今までより詳しく書くことにしました(説明が簡単なので)

while(True):
    #とりあえず複数のデータセットに対して行えるようにします
    N = int(input())
    #終了判定
    if N == 0:
        quit()

    #方針として、ヒントにもあるように[識別子,[セクタ範囲]]というデータ構造を作ります(以下の「data」)
    #工夫として、例えばセクタ3、4、5に同じ数字が入っている時、セクタ範囲を[3,6]とします
    #これによって、その範囲に同じ数字がいくつ入っているかをカウントするのが容易になります
    #また、これとは別に、Nullになっているセクタの範囲を記したデータ構造を作ります(以下の「emp」)
    #empに空のセクタを集めておくことで、どのセクタにどの識別子を入れているかの判別が簡単になり、
    #なおかつdeleteした時の空セクタを簡単に取り扱うことができます
    #commandはせいぜい10000個なのでセクタ範囲の分割もせいぜい10000個であり、これで間に合うことがわかります(最大でソートのO(NlogN))
    #以下実装

    data = []
    emp = [[0,1+10**9]] #empは最初セクタ0~セクタ10**9。
    for _____ in range(N): #N回の命令。
        tmp = input().split()
        if tmp[0] == "W":#書き込みの時
            c,k = int(tmp[1]),int(tmp[2]) #cが識別子、kが個数
            while(k): #empのうち、セクタ範囲が小さい順から順番に入れていけばいいことがわかります
                      #この操作のために、empが増えた時にはsortし、常にセクタ範囲が小さい順になるようにします
                      #入りきらなかった場合は、とりあえずその分を入れて残りを入れればいいので、whileループを回します
                if (emp[0][1]-emp[0][0]) > k: #最初の空な範囲のなかに識別子が全て入ってしまうとき。
                    data.append([c,[emp[0][0],emp[0][0]+k]]) #dataに書き込んだ分を追加
                    emp[0] = [emp[0][0]+k,emp[0][1]] #代わりにempの最初のセクタ範囲が入れた分だけ減ります
                    break
                else: #ぴったり入るか、入りきらない場合
                    data.append([c,emp[0]]) #とりあえず最初のとこに入るだけ入れちゃいます
                    k -= (emp[0][1]-emp[0][0]) #入れた分だけ残りの入れる分を消します
                    del(emp[0]) #空な範囲の最初の部分が消える。
        elif tmp[0] == "D": #消すとき
            emp += [i[1] for i in data if i[0] == int(tmp[1])] #消したい識別子と一致するような範囲を全てempに足します
            data = [i for i in data if i[0] != int(tmp[1])] #dataは消したい識別子以外の識別子の範囲だけになります
            emp.sort() #empの範囲が小さい順になるようにsort。ちなみに理屈から分かる通り範囲がかぶることはないので安心です
        else: #読み込みの時
            ans = True
            s = int(tmp[1]) #sは読み込みたいセクタ範囲
            for i in data:
                if i[1][0]<=s<i[1][1]: #sが空でないdataのセクタとして書いてあればその識別子を書いておしまいです
                    print(i[0])
                    ans = False
                    break
            if ans: #どこにも書いてなければ-1を書いて終わり。
                print(-1)
    print() #データセットごとに改行。

Buggy python submission (verdict: Runtime Error):
while(True):
    N = int(input())
    if N == 0:
        quit()
    data = []
    emp = [[0,2 * 10**9]]
    for _____ in range(N):
        tmp = input().split()
        if tmp[0] == "W":
            c,k = int(tmp[1]),int(tmp[2])
            while(k):
                if (emp[0][1]-emp[0][0]) > k:
                    data.append([c,[emp[0][0],emp[0][0]+k]])
                    emp[0] = [emp[0][0]+k,emp[0][1]]
                    break
                elif (emp[0][1]-emp[0][0]) == k:
                    data.append([c,[emp[0][0],emp[0][0]+k]])
                    del(emp[0])
                    break
                else:
                    data.append([c,emp[0]])
                    k -= (emp[0][1]-emp[0][0])
                    del(emp[0])
        elif tmp[0] == "D":
            for i in range(len(data)):
                emp += [i[1] for i in data if i[0] == int(tmp[1])]
                data = [i for i in data if i[0] != int(tmp[1])]
                emp.sort()
        else:
            ans = True
            s = int(tmp[1])
            for i in data:
                if i[1][0]<=s<i[1][1]:
                    print(i[0])
                    ans = False
                    break
            if ans:
                print(-1)
    print()



Fixed submission:
#教室内の位置は右*中央
#問題は「Restrictive Filesystem」(http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2152)
#ところでコメントを今までより詳しく書くことにしました(説明が簡単なので)

while(True):
    #とりあえず複数のデータセットに対して行えるようにします
    N = int(input())
    #終了判定
    if N == 0:
        quit()

    #方針として、ヒントにもあるように[識別子,[セクタ範囲]]というデータ構造を作ります(以下の「data」)
    #工夫として、例えばセクタ3、4、5に同じ数字が入っている時、セクタ範囲を[3,6]とします
    #これによって、その範囲に同じ数字がいくつ入っているかをカウントするのが容易になります
    #また、これとは別に、Nullになっているセクタの範囲を記したデータ構造を作ります(以下の「emp」)
    #empに空のセクタを集めておくことで、どのセクタにどの識別子を入れているかの判別が簡単になり、
    #なおかつdeleteした時の空セクタを簡単に取り扱うことができます
    #commandはせいぜい10000個なのでセクタ範囲の分割もせいぜい10000個であり、これで間に合うことがわかります(最大でソートのO(NlogN))
    #以下実装

    data = []
    emp = [[0,1+10**9]] #empは最初セクタ0~セクタ10**9。
    for _____ in range(N): #N回の命令。
        tmp = input().split()
        if tmp[0] == "W":#書き込みの時
            c,k = int(tmp[1]),int(tmp[2]) #cが識別子、kが個数
            while(k): #empのうち、セクタ範囲が小さい順から順番に入れていけばいいことがわかります
                      #この操作のために、empが増えた時にはsortし、常にセクタ範囲が小さい順になるようにします
                      #入りきらなかった場合は、とりあえずその分を入れて残りを入れればいいので、whileループを回します
                if (emp[0][1]-emp[0][0]) > k: #最初の空な範囲のなかに識別子が全て入ってしまうとき。
                    data.append([c,[emp[0][0],emp[0][0]+k]]) #dataに書き込んだ分を追加
                    emp[0] = [emp[0][0]+k,emp[0][1]] #代わりにempの最初のセクタ範囲が入れた分だけ減ります
                    break
                else: #ぴったり入るか、入りきらない場合
                    data.append([c,emp[0]]) #とりあえず最初のとこに入るだけ入れちゃいます
                    k -= (emp[0][1]-emp[0][0]) #入れた分だけ残りの入れる分を消します
                    del(emp[0]) #空な範囲の最初の部分が消える。
        elif tmp[0] == "D": #消すとき
            emp += [i[1] for i in data if i[0] == int(tmp[1])] #消したい識別子と一致するような範囲を全てempに足します
            data = [i for i in data if i[0] != int(tmp[1])] #dataは消したい識別子以外の識別子の範囲だけになります
            emp.sort() #empの範囲が小さい順になるようにsort。ちなみに理屈から分かる通り範囲がかぶることはないので安心です
        else: #読み込みの時
            ans = True
            s = int(tmp[1]) #sは読み込みたいセクタ範囲
            for i in data:
                if i[1][0]<=s<i[1][1]: #sが空でないdataのセクタとして書いてあればその識別子を書いておしまいです
                    print(i[0])
                    ans = False
                    break
            if ans: #どこにも書いてなければ-1を書いて終わり。
                print(-1)
    print() #データセットごとに改行。