class Solution {
public:
    /**
     * 
     * @param numbers int整型vector 
     * @param target int整型 
     * @return int整型vector
     */
    vector<int> twoSum(vector<int>& numbers, int target) {
        // write code here
        map<int,priority_queue<int,vector<int>,greater<int> > > mp;
        for(int i = 0;i < numbers.size();++i)
            mp[numbers[i]].push(i + 1);
        sort(numbers.begin(),numbers.end());
        for(int i = 0,j = numbers.size() - 1;i < numbers.size() && j > i;){
            if((numbers[i] + numbers[j]) == target){
                 if(mp[numbers[i]].top() < mp[numbers[j]].top()) 
                     return vector<int>{mp[numbers[i]].top(),mp[numbers[j]].top()};
                 else if(mp[numbers[i]].top() == mp[numbers[j]].top()){
                         int first = mp[numbers[i]].top();
                         mp[numbers[i]].pop();
                         return vector<int>{first,mp[numbers[j]].top()};
                     }
                else
                    return vector<int>{mp[numbers[j]].top(),mp[numbers[i]].top()};
             }
            else if(numbers[i] + numbers[j] > target)
                --j;
            else 
                ++i;
        }
        return vector<int>{};
    }
};