Advertisement
deadwing97

CHFCH Tester

Feb 23rd, 2019
624
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.88 KB | None | 0 0
  1. //teja349
  2. #include <bits/stdc++.h>
  3. #include <vector>
  4. #include <set>
  5. #include <map>
  6. #include <string>
  7. #include <cstdio>
  8. #include <cstdlib>
  9. #include <climits>
  10. #include <utility>
  11. #include <algorithm>
  12. #include <cmath>
  13. #include <queue>
  14. #include <stack>
  15. #include <iomanip>
  16. #include <ext/pb_ds/assoc_container.hpp>
  17. #include <ext/pb_ds/tree_policy.hpp>
  18. //setbase - cout << setbase (16); cout << 100 << endl; Prints 64
  19. //setfill -   cout << setfill ('x') << setw (5); cout << 77 << endl; prints xxx77
  20. //setprecision - cout << setprecision (14) << f << endl; Prints x.xxxx
  21. //cout.precision(x)  cout<<fixed<<val;  // prints x digits after decimal in val
  22.  
  23. using namespace std;
  24. using namespace __gnu_pbds;
  25.  
  26. #define f(i,a,b) for(i=a;i<b;i++)
  27. #define rep(i,n) f(i,0,n)
  28. #define fd(i,a,b) for(i=a;i>=b;i--)
  29. #define pb push_back
  30. #define mp make_pair
  31. #define vi vector< int >
  32. #define vl vector< ll >
  33. #define ss second
  34. #define ff first
  35. #define ll long long
  36. #define pii pair< int,int >
  37. #define pll pair< ll,ll >
  38. #define sz(a) a.size()
  39. #define inf (1000*1000*1000+5)
  40. #define all(a) a.begin(),a.end()
  41. #define tri pair<int,pii>
  42. #define vii vector<pii>
  43. #define vll vector<pll>
  44. #define viii vector<tri>
  45. #define mod (1000*1000*1000+7)
  46. #define pqueue priority_queue< int >
  47. #define pdqueue priority_queue< int,vi ,greater< int > >
  48. #define flush fflush(stdout)
  49. #define primeDEN 727999983
  50. mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
  51.  
  52. // find_by_order()  // order_of_key
  53. typedef tree<
  54. int,
  55. null_type,
  56. less<int>,
  57. rb_tree_tag,
  58. tree_order_statistics_node_update>
  59. ordered_set;
  60. #define int ll
  61. vector<vi> vec(312345);
  62. int pre[312345];
  63. int getapsum(int val){
  64.     return val*(val+1)/2;
  65. }
  66. int getsum(int i,int j){
  67.     if(i==0)
  68.         return pre[j];
  69.     return pre[j]-pre[i-1];
  70. }
  71. int a[312345],done[312345];
  72. main(){
  73.     std::ios::sync_with_stdio(false); cin.tie(NULL);
  74.     int t;
  75.     cin>>t;
  76.     while(t--){
  77.         int n,k;
  78.         cin>>n>>k;
  79.         int i;
  80.         map<int,int> mapi;
  81.         rep(i,n){
  82.             cin>>a[i];
  83.             done[a[i]]=0;
  84.             vec[a[i]].pb(i);
  85.         }
  86.         int val,lef,rig,j,ans,mini,iinf;
  87.         iinf=inf;
  88.         iinf*=inf;
  89.         mini=iinf;
  90.         rep(i,n){
  91.             if(done[a[i]])
  92.                 continue;
  93.             done[a[i]]=1;
  94.             if(vec[a[i]].size()<k){
  95.                 vec[a[i]].clear();
  96.                 continue;
  97.             }
  98.             val=a[i];
  99.             lef=k/2;
  100.             rig=k-lef;
  101.             rep(j,vec[val].size()){
  102.                 if(j==0){
  103.                     pre[j]=vec[val][j];
  104.                 }
  105.                 else{
  106.                     pre[j]=pre[j-1]+vec[val][j];
  107.                 }
  108.             }
  109.             f(j,k/2,vec[val].size()){
  110.                 if(j+rig-1==vec[val].size())
  111.                     break;
  112.                 ans=getapsum(vec[val][j]-1)-getapsum(vec[val][j]-lef-1)-getsum(j-lef,j-1);
  113.                 ans+=getsum(j,j+rig-1)-getapsum(vec[val][j]+rig-1)+getapsum(vec[val][j]-1);
  114.                 mini=min(mini,ans);
  115.             }
  116.             vec[val].clear();
  117.  
  118.         }
  119.         if(mini==iinf)
  120.             mini=-1;
  121.         cout<<mini<<endl;
  122.        
  123.     }
  124.     return 0;  
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement