HDU3627 set+map
2015-09-08 18:08
204 查看
题意:添加 删除 查找第一个x y都比它大的值
#include <iostream> #include <algorithm> #include <cstring> #include <cmath> #include <queue> #include <vector> #include <cstdio> #include <set> #include <map> using namespace std; set<int>s; set<int>::iterator ss; map<int,int>y; map<int,set<int> >f; map<int,set<int> >::iterator ff; int main() { //freopen("in.txt","r",stdin); int n,cas=1; while(~scanf("%d",&n)&&n) { if(cas!=1) printf("\n"); s.clear(); y.clear(); f.clear(); char str[10]; int a,b; printf("Case %d:\n",cas++); while(n--) { scanf("%s%d%d",str,&a,&b); if(str[0]=='a') { if(y.find(b)==y.end()) y[b]=1; else y[b]++; if(s.find(a)==s.end()) s.insert(a); ff=f.find(a); if(ff==f.end()) f[a].insert(b); else { ss=ff->second.find(b); if(ss!=ff->second.end()) continue; ff->second.insert(b); } } else if(str[0]=='f') { if(y.upper_bound(b)==y.end()) { printf("-1\n"); continue; } int p=a; while(1) { if(s.empty()) { printf("-1\n"); break; } ss=s.upper_bound(p); if(ss==s.end()) { printf("-1\n"); break; } else { int temp=*ss; p=temp; if(f[temp].empty()) continue; ss=f[temp].upper_bound(b); if(ss==f[temp].end()) continue; else { printf("%d %d\n",temp,*ss); break; } } } } else if(str[0]=='r') { f[a].erase(b); if(f[a].empty()) s.erase(a); if(!--y[b]) y.erase(b); } } } return 0; }
相关文章推荐
- Linux进程管理及进程管理工具的使用
- 编程中的数学问题
- Android iphone手机分辨率尺寸比例整理
- 实时获取UITextFiled和UIDataPicker等的显示数值
- 【jsp】input 控制输入类型
- HighCharts入门
- 2015年9月5日课程作业(at、crontab)
- android 上面一个listview下面一个button,让button一直处于listview的下方
- java操作redis3.0集群
- 基于飞思卡尔imx6 sabrelite开发板的android lvds屏幕驱动调试
- xcode regular expression 正则表达式查找替换
- [LeetCode] Add Digits - 数字各个位数求和
- jQuery获得页面绝对和相对的位置
- [部署]CentOS安装apache
- C++ 插入排序并统计数值出现的次数
- MyEclipse注释规范模板
- Android编程实用小技巧
- 夯实java基础,深入理解Android设计思想
- Construct Binary Tree from Inorder and Postorder Traversal 描述
- SwipeListView实现item互斥