Advertisement
Guest User

For andround_spoj

a guest
Jul 31st, 2016
240
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.93 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main(){
  5.     int t;
  6.     cin >> t;
  7.     while(t--){
  8.         int n, k;
  9.         cin >> n >> k;
  10.         if(2*k + 1 >= n){
  11.             int rez = 0x7fffffff;
  12.             for(int i = 0, x; i < n; ++i){
  13.                 cin >> x;
  14.                 rez &= x; }
  15.             for(int i = 0; i < n; ++i){
  16.                 cout << rez << ' '; }
  17.             cout << '\n';
  18.             continue; }
  19.  
  20.         vector<int> buf(2*n);
  21.         for(int i = n; i < 2*n; ++i){
  22.             cin >> buf[i]; }
  23.  
  24.         for(int i = n-1; i > 0; --i){
  25.             buf[i] = (buf[2*i] & buf[2*i+1]); }
  26.  
  27.         auto query = [&](int st, int dr){
  28.             int rez = 0x7fffffff;
  29.             for(st += n, dr += n+1; st < dr; st /= 2, dr /= 2){
  30.                 if(st%2){
  31.                     rez &= buf[st++]; }
  32.                 if(dr%2){
  33.                     rez &= buf[--dr]; } }
  34.             return rez; };
  35.  
  36.         for(int i = 0, st = n-k, dr = k; i < n; ++i, ++st, ++dr,
  37.                 st = (st >= n ? st-n : st), dr = (dr >= n ? dr-n : dr)){
  38.             cout << (st < dr ? query(st, dr) : query(0, dr) & query(st, n-1)) << ' '; }
  39.         cout << '\n'; }
  40.     return 0; }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement