list
#include <cstdio>
#include<iostream>
#include<list>
#include<string>
using namespace std;
/*
new id ——新建一个指定编号为id的序列(id<10000)
add id num——向编号为id的序列加入整数num
merge id1 id2——合并序列id1和id2中的数,并将id2清空
unique id——去掉序列id中重复的元素
out id ——从小到大输出编号为id的序列中的元素,以空格隔开
*/
int main(){
list<int> a[10000];
string s;
int id,id1,id2;
int num,cases;
cin>>cases;
for(int i=0;i<cases;i++){
cin>>s;
if(s=="new"){
cin>>id;
}
else if(s=="add"){
cin>>id>>num;
a[id].push_back(num);
}
else if(s=="merge"){
cin>>id1>>id2;
a[id1].sort();
a[id2].sort();
a[id1].merge(a[id2]);
}
else if(s=="unique"){
cin>>id;
a[id].sort();//!!!!注意去除重复元素前排序,这样才能去除所有重复元素,unique去除的是相邻的重复元素
a[id].unique();
}
else if(s=="out"){
cin>>id;
a[id].sort();
list<int>::iterator it;
for(it=a[id].begin();it!=a[id].end();it++){
cout<<*it<<" ";
}
cout<<endl;
}
}
}
/*
16
new 1
new 2
add 1 1
add 1 2
add 1 3
add 2 1
add 2 2
add 2 3
add 2 4
out 1
out 2
merge 1 2
out 1
out 2
unique 1
out 1
1 2 3
1 2 3 4
1 1 2 2 3 3 4
1 2 3 4
*/
set
multiset 有count(T x)函数可以计数容器内个数, 请记住这个宝藏函数。。。
#include <iostream>
#include<set>
#include <string>
using namespace std;
int main(){
string command;
set <int> a;
int x,n;
multiset <int> b;
cin>>n;
for(int i=0;i<n;i++){
cin>>command;
if(command=="add"){
cin>>x;
a.insert(x);
b.insert(x);
cout<<b.count(x)<<endl;
}
else if(command=="del"){
cin>>x;
cout<<b.count(x)<<endl;
b.erase(x);
}
else if(command=="ask"){
cin>>x;
cout<<a.count(x)<<" "<<b.count(x)<<endl;
}
}
}
冷血格斗场
#include <iostream>
#include<map>
#include <string>
using namespace std;
/* 为了迎接08年的奥运会,让大家更加了解各种格斗运动,facer新开了一家热血格斗场。格斗场实行会员制,但是新来的会员不需要交入会费,而只要同一名老会员打一场表演赛,证明自己的实力。
我们假设格斗的实力可以用一个正整数表示,成为实力值。另外,每个人都有一个唯一的id,也是一个正整数。为了使得比赛更好看,每一个新队员都会选择与他实力最为接近的人比赛,即比赛双方的
实力值之差的绝对值越小越好,如果有两个人的实力值与他差别相同,则他会选择比他弱的那个(显然,虐人必被虐好)。
不幸的是,Facer一不小心把比赛记录弄丢了,但是他还保留着会员的注册记录。现在请你帮facer恢复比赛纪录,按照时间顺序依次输出每场比赛双方的id。
输入
第一行一个数n(0 < n <=100000),表示格斗场新来的会员数(不包括facer)。以后n行每一行两个数,按照入会的时间给出会员的id和实力值。一开始,facer就算是会员,id为1,实力值
1000000000。输入保证两人的实力值不同。
输出
N行,每行两个数,为每场比赛双方的id,新手的id写在前面。 */
int main(){
int n;
int id,power;
map<int,int> ma;
ma.insert(make_pair(1000000000,1));
typedef map<int,int> mm;
cin>>n;
for(int i=0;i<n;i++){
cin>>id>>power;
map<int,int>::iterator it1=ma.begin();;
map<int,int>::iterator it2=ma.end();
it2--;
pair<mm::iterator,mm::iterator> it3=ma.equal_range(power);
it3.first--;
if(power<it1->first){
cout<<id<<" "<<it1->second<<endl;
}
else if(power>it2->first){
cout<<id<<" "<<it2->second<<endl;
}
else{
int former=power- it3.first->first;
int latter=it3.second->first-power;
if(former<=latter){
cout<<id<<" "<<it3.first->second<<endl;
}
else{
cout<<id<<" "<<it3.second->second<<endl;
}
}
ma.insert(make_pair(power,id));
}
}