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;
}

Download