#include #include #include #include #include using namespace std; const int N = 100100; const int M = 5000; int n, m, sol_num, tot; int arr[11][M]; int cnt[N][11]; int sum[11]; bool solve[N][10]; char s1[20], s2[20]; int solved[N]; int pen[N]; int last[N]; struct Team{ int id, ac; Team(){} Team(int id, int ac):id(id),ac(ac){} bool operator < (const Team &A)const{ return ac0; x-=lowbit(x)) res += arr[sol][x]; return res; } Team t[N]; map > MP[11]; set ST; void init(){ for(int i=1; i<=m; i++){ MP[i].clear(); } ST.clear(); for(int i=0; i57) c=getchar(); while(c>=48 && c<=57){ x = x*10+c-48; c = getchar(); } } inline void read(int &x){ char c=getchar(); x = c-'A'; } void submit(){ int min, id, flag, pro; in(min); in(id); read(pro); in(flag); if(min - last[id] < 5 || solve[id][pro]) return; last[id] = min; if(flag){ printf("[%d][%c]\n", id, pro+'A'); int sol = solved[id]; int penlty = pen[id]; if(sol){ MP[sol][penlty].erase(t[id]); add(sol, penlty, -1); sum[sol]--; } else{ sol_num++; ST.erase(id); } sol++; penlty += min + cnt[id][pro]*20; solved[id]++; pen[id] = penlty; t[id].ac = ++tot; MP[sol][penlty].insert(t[id]); add(sol, penlty, 1); solve[id][pro]=1; sum[sol]++; } else{ cnt[id][pro]++; } } int R(){ int id, res; in(id); if(solved[id]==0) return sol_num+1; res = cal(solved[id], pen[id]-1)+1; for(int i=solved[id]+1; i<=m; i++) res+=sum[i]; return res; } int find(int sol, int rank){ int low=0, top=M, mid; int ans = M; while(low<=top){ mid = (low+top)>>1; int res = cal(sol, mid); if(res >= rank){ ans = min(ans, mid); top = mid-1; } else{ low = mid+1; } } int tmp = cal(sol, ans-1); if(tmp + 1 != rank) return -1; return MP[sol][ans].begin()->id; } int T(){ int rank; in(rank); if(rank > n) return -1; if(rank == sol_num+1) return *ST.begin(); if(rank > sol_num) return -1; int i, res = 0; for(i=m; i>=0; i--){ res += sum[i]; if(res >= rank) break; } res -= sum[i]; return find(i, rank - res); } int main(){ while(~scanf("%d %d", &n, &m)){ init(); while(~scanf("%s", s1) && s1[0]!='C'){ if(s1[0]=='S') submit(); else if(s1[0]=='T') printf("%d\n", T()); else printf("%d\n", R()); } scanf("%s", s1); puts(""); } return 0; }