CPPSET - Tập hợp động
Tác giả: khuc_tuan
Ngôn ngữ: C++
#include <iostream>
#include <set>
using namespace std;
typedef set<int> :: iterator ite;
set<int> se;
int main() {
while(true) {
int code, x;
//cout << " === ";
//cout << "{";
//for(ite p=se.begin();p!=se.end();++p)
//cout << "}";
scanf("%d", &code);
if(code==0) break;
if(code==1) {
// add
scanf("%d", &x);
se.insert(x);
}
else if(code==2) {
// delete
scanf("%d", &x);
se.erase(x);
}
else if(code==3) {
// min
if(se.size()!=0) printf("%d\n", *se.begin());
else printf("empty\n");
}
else if(code==4) {
// max
if(se.size()==0) printf("empty\n");
else {
ite i;
i = se.end();
--i;
printf("%d\n", *i);
}
}
else if(code==5) {
// succ
scanf("%d", &x);
if(se.size()==0) printf("empty\n");
else {
ite i = se.upper_bound(x);
if(i==se.end()) printf("no\n");
else printf("%d\n", *i);
}
}
else if(code==6) {
// succ_2
scanf("%d", &x);
if(se.size()==0) printf("empty\n");
else {
ite i = se.lower_bound(x);
if(i==se.end()) printf("no\n");
else printf("%d\n", *i);
}
}
else if(code==7) {
// pred x
scanf("%d", &x);
if(se.size()==0) printf("empty\n");
else {
ite i = se.lower_bound(x);
if(i==se.end()) --i;
while(i!=se.begin()) {
if(*i<x) break;
--i;
}
if(*i<x) printf("%d\n", *i);
else printf("no\n");
}
}
else if(code==8) {
scanf("%d", &x);
if(se.size()==0) printf("empty\n");
else {
ite i =se.lower_bound(x);
if(i==se.end()) --i;
while(i!=se.begin()) {
if(*i<=x) break;
--i;
}
if(*i<=x) printf("%d\n", *i);
else printf("no\n");
}
}
}
return 0;
}