新手赛的题,据说是以前4+2的。老了,都没资格参加。
在大牛的指点下,用STL的set解决,嚓,这样编程实现的话简单得多啊
还好以前有看那本C++ primer,不熟的话,用stl也不是那么好写滴!
主要注意:
- set不支持随机访问。所以就只能用自增,自减来移动指针了。
- find查找不到返回的是“超出末端的迭代器”。
- 注意数据的一种“情况"要考虑周全。
- 数据类型用int就够了。
先自己写写看吧。
#include<cstdio>
#include<set>
using namespace std;
int n;
int ans, x;
char str[10];
int main(){
while ( scanf("%d", &n) != EOF ){
set<int> s;
for (int i=0; i<2; ++i){
scanf("%s %d", str, &x);
s.insert(x);
}
set<int>::iterator curit, preit, posit;
int curval, posval, preval;
curit = s.begin();
posit = curit;
++posit;
ans= *posit - *curit;
for (int i=2; i<n; ++i){
scanf("%s", str);
if (str[0]=='A'){
scanf("%d", &x);
if ( s.find(x) == s.end() ){
s.insert(x);
}else{
ans = 0;
continue;
}
curit = s.find(x);
posit = preit = curit;
++posit;
--preit;
posval = *(posit);
preval = *(preit);
if ( curit != s.begin() && x-preval < ans ){
ans = x-preval;
}
if ( posit != s.end() && posval-x < ans ){
ans = posval - x;
}
}else if ( str[0]=='Q' ){
printf("%d\n", ans);
}
}
}
return 0;
}
本文介绍了一种利用C++ STL中的set解决特定算法问题的方法。重点在于如何通过set进行数据插入、查找及迭代操作,并关注set不支持随机访问的特点。通过对示例代码的解析,展示了如何高效地维护一组整数并找到最小间隔。
1220

被折叠的 条评论
为什么被折叠?



