本文共 1754 字,大约阅读时间需要 5 分钟。
这题没什么好说的:只要维护几个值就好了,因为属性是唯一而且不会改变的所以用Map 来映射下就好了,留下代码备用
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 using namespace std; 10 typedef long long LL; 11 map Hash; 12 set SET; 13 map ::iterator it; 14 set ::iterator it_set; 15 struct info 16 { 17 int w; 18 LL t; 19 info(int w,LL t):w(w),t(t){} 20 info(){t=0;} 21 }; 22 info que[50050]; 23 int pos,top; 24 void inint() 25 { 26 Hash.clear(); 27 SET.clear(); 28 top=-1; 29 pos=0; 30 } 31 void Rotate(int p,bool flag) 32 { 33 if(p<1||p>pos){ printf("out of range");return;} 34 if(flag)printf("success"); 35 info t=que[p]; 36 for(int i=p;i>=2;i--) 37 { 38 que[i]=que[i-1]; 39 it=Hash.find(que[i].w); 40 Hash.erase(it); 41 Hash[que[i].w]=i; 42 } 43 que[1]=t; 44 it=Hash.find(que[1].w); 45 Hash.erase(it); 46 Hash[que[1].w]=1; 47 } 48 void Choose(int p) 49 { 50 int t=Hash[p]; 51 if(t==0){printf("invalid priority");return;} 52 printf("success"); 53 Rotate(Hash[p],false); 54 } 55 56 void Prior() 57 { 58 if(pos==0){printf("empty");return;} 59 printf("success"); 60 it_set=SET.end(); 61 it_set--; 62 int num=*it_set; 63 Rotate(Hash[num],false); 64 } 65 void Add(int p) 66 { 67 if(Hash[p]!=0){printf("same priority");return;} 68 printf("success"); 69 que[++pos]=info(p,0); 70 Hash[p]=pos; 71 SET.insert(p); 72 } 73 void Close(int p) 74 { 75 if(Hash[p]==0){printf("invalid priority");return;} 76 int t=Hash[p]; 77 if(que[t].w!=p) while(1){} 78 printf("close %d with %d",p,que[t].t); 79 if(top==p){ while(1){} top=-1;} 80 it=Hash.find(p); 81 Hash.erase(it); 82 SET.erase(p); 83 for(int i=t;i
转载于:https://www.cnblogs.com/shuly/p/4043936.html