/*
用set.size()来控制整个窗口的大小如果在set中存在nums[j]这说明
i,j之间的绝对值差小于k
然后用lower_bound查询nums[i]-t,nums[i]+t的值是否存在
*/
class Solution {
public:
bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {
const int val_diff_bound = t;
set<long> ordered_nums;
for(size_t i=0;i<nums.size();++i){
auto ind = ordered_nums.lower_bound((long)((long)nums[i] - (long)val_diff_bound));
if((ind != ordered_nums.end()) && (*ind <= (long)((long)nums[i] + (long)val_diff_bound))) return true;
ordered_nums.insert(nums[i]);
if(ordered_nums.size() > static_cast<size_t>(k)){
ordered_nums.erase(nums[i-k]);
}
}
return false;
}
};