class Solution {
public:
    bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {
        set<int> mySet;

        for(int i=0; i<nums.size(); i++){
            // remove element outside k distance range from mySet
            if(i-k-1>=0)
                mySet.erase(nums[i-k-1]);

            set<int>::iterator itup = mySet.upper_bound(nums[i]-t-1);

            if(itup==mySet.end()){
                mySet.insert(nums[i]);
                continue;
            }

            if(abs(*itup-nums[i])<=t )
                return true;

            mySet.insert(nums[i]);
        }
        return false;
    }
};