fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. vector<int> tab;
  5.  
  6. bool czy(int x,int n,int k)
  7. {
  8. vector<int> lis;
  9. vector<int> dp(k+3,0);
  10. for(int i = 0;i < n;++i)
  11. {
  12. if(tab[i] >= x)
  13. {
  14. lis.push_back(1);
  15. }
  16. else
  17. {
  18. lis.push_back(0);
  19. }
  20. }
  21. for(int i = n-1;i >= 0;i--)
  22. {
  23. int j = i%k;
  24. dp[j] = max(dp[j],dp[j+1] + lis[i]);
  25. }
  26. //cout << dp[k-1] << endl;
  27. if(dp[0] >= (n%k)/2 + ((n%k) == 0 ? n : 0)) return true;
  28. return false;
  29. //cout << dp[k-1] << endl;
  30. }
  31.  
  32. int main()
  33. {
  34. int t;
  35. cin >> t;
  36. for(int q = 0;q < t;++q)
  37. {
  38. int n,k,x;
  39. cin >> n >> k;
  40. for(int i = 0;i < n;++i)
  41. {
  42. cin >> x;
  43. tab.push_back(x);
  44. }
  45. //cout << czy(3,n,k);
  46. int l = 0,p=1000000003,mid;
  47. while(l < p)
  48. {
  49. mid = (l+p+1)/2;
  50. if(czy(mid,n,k) == true)
  51. {
  52. l = mid;
  53. }
  54. else
  55. {
  56. p = mid-1;
  57. }
  58. }
  59. cout << l << endl;
  60. }
  61. }
  62.  
Success #stdin #stdout 0.01s 5280KB
stdin
5
4 3
3 9 9 2
5 3
3 2 5 6 4
7 1
5 9 2 6 5 4 6
8 2
7 1 2 6 8 3 4 5
4 5
3 4 5 6
stdout
1000000003
9
0
0
9