Advertisement
Korotkodul

CF D

Aug 15th, 2022 (edited)
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.53 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <vector>
  4. #include <queue>
  5. #include <algorithm>
  6. #include <string>
  7. #include <stack>
  8. #include <set>
  9. #include <map>
  10. #define pii pair <int,int>
  11. #define vec vector
  12. using namespace std;
  13. using ll = long long;
  14. using ld = long double;
  15. using db = double;
  16. void cv(vector <int> &v){
  17.     for (auto x: v) cout<<x<<' ';
  18.     cout<<"\n";
  19. }
  20.  
  21. void cvl(vector <ll> &v){
  22.     for (auto x: v) cout<<x<<' ';
  23.     cout<<"\n";
  24. }
  25.  
  26.  
  27. void cvv(vector <vector <int> > &v){
  28.     for (auto x: v) cv(x);
  29.     cout<<"\n";
  30. }
  31.  
  32. void cvb(vector <bool> v){
  33.     for (bool x: v) cout<<x<<' ';
  34.     cout<<"\n";
  35. }
  36.  
  37. void cvs(vector <string>  v){
  38.     for (auto a: v){
  39.         cout<<a<<"\n";
  40.     }
  41. }
  42.  
  43. void cvp(vector <pii> a){
  44.     for (auto p: a){
  45.         cout<<p.first<<' '<<p.second<<"\n";
  46.     }
  47.     cout<<"\n";
  48. }
  49.  
  50.  
  51. int n,N,k;
  52.  
  53. vector <int> a;
  54.  
  55. const int inf = 1e9;
  56.  
  57. int up2(int x){
  58.     int y = log2(x);
  59.     if (pow(2, y) < x){
  60.         y++;
  61.     }
  62.     y = pow(2, y);
  63.     return y;
  64. }
  65.  
  66. struct tree{
  67.     vector <pii> MN; //{mn, id}
  68.     vector <int> fr0, fr1; //макс мин на отрезках длины 2
  69.     void bld(){
  70.         N = up2(n);
  71.         MN.assign(2 * N - 1, {inf,-1});
  72.         for (int i = N - 1; i < N - 1 + n; ++i){
  73.             int id = i - ( N - 1);
  74.             MN[i] = {a[id], id};
  75.         }
  76.         for (int i = N - 2;i >= 0; --i){
  77.             if (MN[2*i + 1] < MN[2 * i + 2]){
  78.                 MN[i] = MN[2*i + 1];
  79.             }
  80.             else{
  81.                 MN[i] = MN[2 * i + 2];
  82.             }
  83.         }
  84.  
  85.         fr0.assign(N - 1, 0);
  86.         fr1.assign(N - 1, 0);
  87.         /*
  88.         УЧТИ?
  89.         fr0
  90.         * * *...
  91.         fr1
  92.         0 * * ...
  93.         здесь первая не учитывается и это надо учесть: как?
  94.  
  95.         вот как:
  96.         fr0
  97.         левый нижний отрезок (0,1)
  98.         fr1
  99.         левый ниждний отрезок (1,2)
  100.         просто это надо учитывать и все
  101.         */
  102.         for (int i = 0; i + 1 < n; i += 2){
  103.             fr0[i/2 + N/2 - 1] = min(a[i], a[i + 1]);
  104.         }
  105.         for (int i = 1; i + 1 < n; i += 2){
  106.             fr1[i/2 + N/2 - 1] = min(a[i], a[i + 1]);
  107.         }
  108.  
  109.         //for (int i = N -)
  110.     }
  111. };
  112.  
  113. void slv(){
  114.  
  115. }
  116.  
  117.  
  118. int main()
  119. {
  120.     ios::sync_with_stdio(0);
  121.     cin.tie(0);
  122.     cout.tie(0);
  123.     int t; cin>>t;
  124.     for (int i = 0; i < t; ++i){
  125.         cin>>n>>k; for (int &i: a) cin>>i;
  126.         slv();
  127.     }
  128. }
  129.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement