Я пытаюсь найти оптимизированный способ решения этой проблемы -
https://www.codechef.com/KJCS2019/problems/TSHACK
int findanswer(int k,const multiset<pair<int,int> >&a2)
{
int freq=0;
while(k>0)
{
multiset<pair<int,int> >::iterator itt=a2.end();
k-=itt.second;
a2.erase(itt);
++freq;
}
return freq;
}
int main()
{
cin>>n>>q;
map<int,int>a;
multiset<pair<int,int> > a2;
for(int i=0;i<n;i++)
{
int b;
cin>>b;
++a[b];
}
for(auto it:a)
a2.insert(make_pair(it.second,it.first));
while(q--)
{
int k;
cin>>k;
int ans=findanswer(k,a2);
cout<<ans<<endl;
}
}
сообщение об ошибке:
prog.cpp: In function 'int findanswer(int, const std::multiset<std::pair<int, int> >&)':
prog.cpp:18:16: error: 'std::multiset<std::pair<int, int> >::iterator {aka struct std::_Rb_tree_const_iterator<std::pair<int, int> >}' has no member named 'second'
k-=itt.second;
^
prog.cpp:19:21: error: passing 'const std::multiset<std::pair<int, int> >' as 'this' argument discards qualifiers [-fpermissive]
a2.erase(itt);
^
Как я уже говорилранее я хотел бы узнать причину, по которой итератор в вызываемой функции не идентифицирует тип данных мультимножества.