Contains Duplicate III
class Solution {
public:
long long abs(long long k) {
return k>0? k:-k;
}
bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {
if (k <= 0) {
return false;
}
set<pair<int, int> > st;
set<pair<int, int> >::iterator itr;
for (int i = 0; i < nums.size(); ++i) {
if (i > 0) {
itr = st.lower_bound(make_pair(nums[i], i));
if (itr != st.end() && abs((long long)nums[i] - itr->first) <= t){
return true;
}
if (itr != st.begin()) {
--itr;
if (abs((long long)nums[i] - itr->first) <= t){
return true;
}
}
}
if (i >= k) {
st.erase(make_pair(nums[i - k], i - k));
}
st.insert(make_pair(nums[i], i));
}
return false;
}
};