HDU-5289<two pointers>
题意:
求一个数列中存在多少个区间,每个区间内的数的差不超过k;
思路:two_pointers;
#include<iostream> #include<cstdio> #include<set> #include<algorithm> using namespace std; const int N=1e5+5; int n,a[N],k; int main () { int t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%d",a+i); multiset<int>m; long long ans=0; for(int l=1,r=1;l<=n;l++) { while(r<=n) { if(m.size()) if(a[r]-*m.begin()>=k||*m.rbegin()-a[r]>=k) break; m.insert(a[r++]); } ans+=r-l; m.erase(m.find(a[l])); } printf("%lld\n",ans); } return 0; }
想的太多,做的太少。