题目链接
#include<bits/stdc++.h> using namespace std; struct node{ long long code; int sc; }a1[10010]; struct node1{ int zw; int sc; }; vector<node>v[5]; char s[2]; long long aa[10010]; int cmp(node a,node b){ if(a.sc!=b.sc)return a.sc>b.sc; else return a.code<b.code; } int cmp1(node1 a,node1 b){ if(a.sc!=b.sc)return a.sc>b.sc; else return a.zw<b.zw; } int ct[1010],scr[1010]; const long long cs=1e9; int mp[1000010]; int lt[20010][1000]; vector<node1>vs[20010]; bool vis[20010]; int main(){ int n,q,sc; char c; long long x; scanf("%d%d",&n,&q); int cnt=0; for(int i=0;i<n;i++){ getchar(); scanf("%c%lld%d",&c,&x,&sc); a1[i].code=x,a1[i].sc=sc; long long zwei=x/cs; long long lx=x/1000; lx=lx00000; aa[i]=lx; if(!mp[lx]){ mp[lx]=++cnt; lt[cnt][zwei]++; }else{ int cnt0=mp[lx]; lt[cnt0][zwei]++; } ct[zwei]++,scr[zwei]+=sc; if(c=='A') v[0].push_back(a1[i]); else if(c=='T') v[1].push_back(a1[i]); else v[2].push_back(a1[i]); } for(int i=0;i<n;i++){ int lx=aa[i],cnt0=mp[lx]; if(cnt0&&vs[cnt0].size()==0){ for(int j=101;j<=999;j++){ if(lt[cnt0][j]){ node1 aa; aa.sc=lt[cnt0][j],aa.zw=j; vs[cnt0].push_back(aa); } } } } for(int i=0;i<3;i++){ sort(v[i].begin(),v[i].end(),cmp); } int op; int Ca=0,zwei; while(q--){ scanf("%d",&op); if(op==1){ scanf("%s",s); printf("Case %d: 1 %c\n",++Ca,s[0]); int tp=s[0]-'A'; if(s[0]=='T')tp=1; if(s[0]=='B')tp=2; if(!v[tp].size()){ printf("NA\n");continue; } for(int i=0;i<v[tp].size();i++){ printf("%c2lld %d\n",s[0],v[tp][i].code,v[tp][i].sc); } } if(op==2){ scanf("%d",&zwei); printf("Case %d: 2 d\n",++Ca,zwei); if(!ct[zwei])printf("NA\n"); else printf("%d %d\n",ct[zwei],scr[zwei]); } if(op==3){ scanf("%d",&zwei); printf("Case %d: 3 d\n",++Ca,zwei); if(!mp[zwei]){ printf("NA\n"); } else{ int lx=zwei; int cnt=mp[lx]; if(!vis[cnt]){ vis[cnt]=1; sort(vs[cnt].begin(),vs[cnt].end(),cmp1); } for(int i=0;i<vs[cnt].size();i++){ printf("d %d\n",vs[cnt][i].zw,vs[cnt][i].sc); } } } } }