AhmedAshraff

Untitled

Sep 23rd, 2025
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.22 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define boAshraf ios_base::sync_with_stdio(false); cin.tie(NULL);
  3. #define ll long long
  4. #define sz(s) (int)(s).size()
  5. #define all(s) (s).begin(),(s).end()
  6. using namespace std;
  7. void File();
  8. void sol();
  9. int main() {
  10.     boAshraf
  11.     File();
  12.     int t = 1;
  13. //    cin >> t;
  14.     while (t--) {
  15.         sol();
  16.     }
  17.     return 0;
  18. }
  19.  
  20. void sol() {
  21.     int n,k;
  22.     cin >> n >> k;
  23.     vector<int>a(n);
  24.     for(auto &it:a)cin>>it;
  25.     if(k <= 2)return void(cout<<0);
  26.  
  27.     vector<int>pre(n, 1), suff(n, 1);
  28.     vector<int>difL(n), difR(n);
  29.     {
  30.         int mx = 1;
  31.  
  32.         for (int i = 1; i < n; i++) {
  33.             if (i >= 2 && (a[i] - a[i - 1]) == (a[i - 1] - a[i - 2])) pre[i] = pre[i - 1] + 1; else pre[i] = 2;
  34.             difL[i] = a[i] - a[i - 1];
  35.             mx = max(mx, pre[i]);
  36.         }
  37.         for (int i = n - 2; i >= 0; i--) {
  38.             if (i + 2 < n && (a[i + 1] - a[i]) == (a[i + 2] - a[i + 1])) suff[i] = suff[i + 1] + 1; else suff[i] = 2;
  39.             difR[i] = a[i + 1] - a[i];
  40.             mx = max(mx, suff[i]);
  41.         }
  42.         if (mx >= k) return void(cout<<0);
  43.     }
  44.  
  45.     vector<int> vals=a;
  46.     sort(all(vals));
  47.     vals.erase(unique(all(vals)),vals.end());
  48.  
  49.     auto get_idx=[&](int x){
  50.         auto it=lower_bound(all(vals), x);
  51.         if(it==vals.end()||*it!=x) return -1;
  52.         return (int)(it-vals.begin());
  53.     };
  54.  
  55.     vector<vector<int>> idxs(sz(vals));
  56.     for(int i=0; i < n; i++){
  57.         int id=get_idx(a[i]);
  58.         assert(~id);
  59.         idxs[id].push_back(i);
  60.     }
  61.  
  62.     map<pair<int,int>, pair<int,int>> best;
  63.     int ans=1e9;
  64.  
  65.     for(int r=0; r < n; r++){
  66.         if(suff[r] >= 2){
  67.             int d=difR[r], needval= a[r] - d;
  68.             int rem= k - suff[r];
  69.             if(rem == 1){
  70.                 int id=get_idx(needval);
  71.                 if(~id){
  72.                     auto &v=idxs[id];
  73.                     auto p=lower_bound(all(v), r);
  74.                     if(p!=v.begin()){
  75.                         int l=*prev(p);
  76.                         ans=min(ans, r - l - 1);
  77.                     }
  78.                 }
  79.             }
  80.             else{
  81.                 auto it=best.find({needval, d});
  82.                 if(it != best.end()){
  83.                     auto [mx,l]=it->second;
  84.                     if(mx >= rem && l < r) ans=min(ans, r - l - 1);
  85.                 }
  86.             }
  87.         }
  88.         if(pre[r] >= 2){
  89.             pair<int,int> key={a[r], difL[r]};
  90.             auto it=best.find(key);
  91.             if(it == best.end() || pre[r] > it->second.first || (pre[r] == it->second.first && r > it->second.second))
  92.                 best[key]={pre[r], r};
  93.         }
  94.     }
  95.  
  96.     for(int l=0; l < n; l++) {
  97.         if (pre[l] >= k - 1) {
  98.             int t = a[l] + difL[l];
  99.             int id = get_idx(t);
  100.             if (~id) {
  101.                 auto &it = idxs[id];
  102.                 auto p = upper_bound(all(it), l);
  103.                 if (p != it.end()) {
  104.                     int r = *p;
  105.                     ans = min(ans, r - l - 1);
  106.                 }
  107.             }
  108.         }
  109.     }
  110.  
  111.     cout<<(ans==1e9?-1:ans);
  112. }
  113.  
  114. void File() {
  115. #ifndef ONLINE_JUDGE
  116.     freopen("input.txt", "r", stdin);
  117.     freopen("output.txt", "w", stdout);
  118. #endif
  119. }
Advertisement
Add Comment
Please, Sign In to add comment