+ vector<Interval> intervals = findIntervals(go);
+ priority_queue<pair<size_t,SortAction>,vector<pair<size_t,SortAction> >, ScoreCmp > pq;
+ for (size_t i = 0; i < intervals.size(); ++i){
+ if (intervals[i].oriented && intervals[i].first != intervals[i].second){
+ SortAction sa(new ReverseAction(intervals[i]));
+ size_t score = scoreAction(go,sa);
+ //cout << "Inversion: " << min(intervals[i].first,intervals[i].second) << ":" << max(intervals[i].first,intervals[i].second)-1 << " Score: " << score << endl;
+ pq.push(pair<size_t,SortAction>(score,sa));
+ }
+ }
+ size_t max = pq.top().first;
+ while (pq.size() > 0 && pq.top().first >= max){
+ al.push_back(pq.top().second);
+ pq.pop();
+ }