在第一种情况中,需要求数字num的位置。
//使用lower_bound()这道题能够AC:
cout<<distance(V.begin(),V.lower_bound(num));
//而如果将lower_bound()函数改为find(),则0分WA:
cout<<distance(V.begin(),V.find(num));
但是这两种方式均能够通过样例。
还希望各位大佬能够不吝赐教,指点迷津。
下面附上AC代码,出问题的语句在function1()中。
#include<bits/stdc++.h>
using namespace std;
//做法二:multiset
multiset<int,less<int>> V;
void function4(int num)
{//求后继
multiset<int>::iterator it;
it = V.upper_bound(num);
cout<<*it;
}
void function3(int num)
{//求前驱
multiset<int>::iterator it;
it = V.lower_bound(num);
it--;
cout<<*it;
}
void function2(int num)
{//查排名为x的
auto it = V.begin();
while(num--)
{
it++;
}
cout<<*it;
}
void function1(int num)
{//求num的位置
cout<<distance(V.begin(),V.lower_bound(num));//不能使用find,原因未知
}
int main()
{
int n;
V.insert(0x7fffffff);
V.insert(-0x7fffffff);
cin>>n;
while(n--){
int id,number;
cin>>id>>number;
switch(id)
{
case 5:V.insert(number);break;
case 4:function4(number);break;
case 3:function3(number);break;
case 2:function2(number);break;
default:function1(number);
}
if(id!=5)cout<<endl;
}
return 0;
}