STL格斗场

来源:互联网 发布:兰亭序 知乎 编辑:程序博客网 时间:2024/04/28 04:13
热血格斗场
#include<iostream>#include<set>#include<stdio.h>#include<stdlib.h>using namespace std;set<pair<int,int> >record;void solve(int p,int i){record.insert(make_pair(p,i));set<pair<int,int> >::iterator it,left,right;right=record.end();right--;it=record.find(make_pair(p,i));if(it==record.begin()){it++;printf("%d %d\n",i,it->second);}else if(it==right){it--;printf("%d %d\n",i,it->second);}else{left=it;left--;right=it;right++;if((it->first-left->first)<=(right->first-it->first))    printf("%d %d\n",i,left->second);else    printf("%d %d\n",i,right->second);}}int main(){int n;scanf("%d",&n);record.insert(make_pair(1000000000,1));for(int i=0;i<n;i++){int power,id;scanf("%d%d",&id,&power);solve(power,id);}return 0;}

冷血格斗场

#include<iostream>#include<set>#include<stdio.h>#include<stdlib.h>using namespace std;set<pair<int,int> >record;void solve(int p,int i){record.insert(make_pair(p,i));set<pair<int,int> >::iterator it,left,right;right=record.end();right--;it=record.find(make_pair(p,i));if(it==record.begin()){right=it;right++;printf("%d %d\n",i,right->second);//power值相等,则按id排序,将id大的删除 if(p==right->first){record.erase(right);}    }else if(it==right){left=it;left--;printf("%d %d\n",i,left->second);if(p==left->first){record.erase(it);}}else{left=it;left--;right=it;right++;if((it->first-left->first)<(right->first-it->first))    printf("%d %d\n",i,left->second);else if((it->first-left->first)>(right->first-it->first))    printf("%d %d\n",i,right->second);else{if(left->second<right->second){printf("%d %d\n",i,left->second);}else{printf("%d %d\n",i,right->second);}}if(p==left->first){record.erase(left);}if(p==right->first){record.erase(right);}}}int main(){int n;scanf("%d",&n);record.insert(make_pair(1000000000,1));for(int i=0;i<n;i++){int power,id;scanf("%d%d",&id,&power);solve(power,id);}return 0;}



0 0
原创粉丝点击