fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int getCount(vector<int> &arr,int L,int R){
  4. int mini=1e9;
  5. int i=0;
  6. int j=0;
  7. unordered_map<int,int>mp;
  8. int n=arr.size();
  9. while(i<n && j<n){
  10. if(arr[j]>=L && arr[j]<=R){
  11. mp[arr[j]]++;
  12. }
  13. if(mp.size()==abs(R-L+1)){
  14. int len=abs(j-i+1);
  15. mini=min(len,mini);
  16. if(arr[i]>=L && arr[i]<=R){
  17. mp[arr[i]]--;
  18. if(mp[arr[i]]==0){
  19. mp.erase(arr[i]);
  20. }
  21. }
  22. i++;
  23. if(arr[j]>=L && arr[j]<=R){
  24. mp[arr[j]]--;
  25.  
  26. }
  27.  
  28. }
  29. else{
  30. j++;
  31. }
  32. }
  33. if(mini==1e9){
  34. return -1;
  35. }
  36. return mini;
  37. }
  38.  
  39. int main() {
  40. // your code goes here
  41. int n;
  42. cin>>n;
  43. vector<int>arr(n);
  44. for(int i=0;i<n;i++){
  45. cin>>arr[i];
  46. }
  47. int L;
  48. cin>>L;
  49. int R;
  50. cin>>R;
  51. cout<<"The smallest valid subarray in the range of L to R is:"<<getCount(arr,L,R);
  52.  
  53. return 0;
  54. }
Success #stdin #stdout 0.01s 5288KB
stdin
10
1 3 5 2 4 6 7 3 5 2
2
5
stdout
The smallest valid subarray in the range of L  to R is:4