Advertisement
MAGCARI

Moving Median (Segment Tree)

Sep 26th, 2022
862
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.91 KB | None | 0 0
  1. /*
  2.     Task    : _example
  3.     Author  : Phumipat C. [MAGCARI]
  4.     Language: C++
  5.     Created : 26 September 2022 [12:43]
  6.     Algo    :
  7.     Status  :
  8. */
  9. #include<bits/stdc++.h>
  10. #define rep(i, a, b) for(int i = a; i <= (b); ++i)
  11. #define repr(i, a, b) for(int i = a; i >= (b); --i)
  12. #define repl(i, a, b) for(LL i = a; i <= (b); ++i)
  13. #define reprl(i, a, b) for(LL i = a; i >= (b); --i)
  14. #define all(x) begin(x),end(x)
  15. #define allst(x,y) (x).begin()+y,(x).end()
  16. #define rmdup(x) sort(all(x)),(x).resize(unique((x).begin(),(x).end())-(x).begin())
  17. #define sz(x) (int)(x).size()
  18. #define decp(x) fixed << setprecision(x)
  19. #define MOD (LL )(1e9+7)
  20. using namespace std;
  21. using LL = long long;
  22. using PII = pair<int ,int >;
  23. using PLL = pair<long long ,long long >;
  24. const int dir4[2][4] = {{1,-1,0,0},{0,0,1,-1}};
  25. const int dir8[2][8] = {{-1,-1,-1,0,1,1,1,0},{-1,0,1,1,-1,0,1,-1}};
  26. LL modN(LL a,LL b,LL c = MOD){
  27.     if(b == 0)  return 1;
  28.     if(b == 1)  return a%c;
  29.     LL now = modN(a,b/2,c);
  30.     if(b&1) return (((now*now)%c)*(a%c))%c;
  31.     else    return (now*now)%c;
  32. }
  33. const int N = 1000010;
  34. int tree[4*N],a[N];
  35. void upd(int l,int r,int now,int idx,int v){
  36.     if(l>idx || r<idx)  return ;
  37.     if(l == r){
  38.         tree[now]+=v;
  39.         return ;
  40.     }
  41.     int mid = (l+r)/2;
  42.     upd(l,mid,now*2,idx,v);
  43.     upd(mid+1,r,now*2+1,idx,v);
  44.     tree[now] = tree[now*2]+tree[now*2+1];
  45. }
  46. int read(int l,int r,int now,int len){
  47.     if(l == r)  return l;
  48.     int mid = (l+r)/2;
  49.     if(len<=tree[now*2])    return read(l,mid,now*2,len);
  50.     else                    return read(mid+1,r,now*2+1,len-tree[now*2]);
  51. }
  52. void init(){
  53.    
  54. }
  55. void solve(){
  56.     int n,w;
  57.     cin >> n >> w;
  58.     for(int i=1;i<=n;i++)
  59.         cin >> a[i];
  60.     for(int i=1;i<=n;i++){
  61.         upd(1,N,1,a[i],1);
  62.         if(i<=w)    continue;
  63.         cout << read(1,N,1,w/2+1) << ' ';
  64.         upd(1,N,1,a[i-w],-1);
  65.     }
  66.    
  67. }
  68. int main(){
  69.     cin.tie(0)->sync_with_stdio(0);
  70.     cin.exceptions(cin.failbit);
  71.     // freopen("d:/Code/C_Programming/input.in","r",stdin);
  72.     init();
  73.     int q = 1;
  74.     // cin >> q;
  75.     for(int Q=1;Q<=q;Q++){
  76.         // cout << "Case #" << Q << ": ";
  77.         solve();
  78.     }
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement