#include <bits/stdc++.h>
using namespace std;
const int MAX = 1e5+10;
vector<int> filter(const vector<int> &vec,int val,less<int> <) {
vector<int> nvec;
vector<int> :: const_iterator iter=vec.begin();
while((iter=find_if(iter,vec.end(),bind2nd(less<int>(),val)))!=vec.end()) {
nvec.push_back(*iter);
iter++;
}
return nvec;
}
template<typename InputIterator ,typename OutputIterator,typename ElemType,typename Comp>
OutputIterator filter(InputIterator first,InputIterator last,OutputIterator at,const ElemType val,Comp pre) {
while((first=find_if(first,last,bind2nd(pre,val)))!=last) {
cout<<*first<<endl;
*at++=*first++;
}
return at;
}
template<typename InputIterator,typename OutputIterator,typename ElemType>
OutputIterator sub_vec(InputIterator first,InputIterator last,ElemType val,OutputIterator at) {
InputIterator first1=first,last1=last;
for(;first!=last;first++) {
*at++=*first++;
}
sort(first1,last1);
first=find_if(first1,last1,bind2nd(less<int>(),val));
at->erase(first,last1);
return at;
}
priority_queue <int,vector<int>,greater<int> > q;
int main() {
const int elem_size=5;
int ia[elem_size]={1,3,4,56,7};
vector<int> res(ia,ia+elem_size);
vector<int> ans;
filter(res.begin(),res.end(),back_inserter(ans),20,greater<int>());
for(int i=0;i<ans.size();i++) {
printf("%d\n",ans[i]);
}
}