Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int main(){
- int t;
- cin >> t;
- while(t--){
- int n, k;
- cin >> n >> k;
- if(2*k + 1 >= n){
- int rez = 0x7fffffff;
- for(int i = 0, x; i < n; ++i){
- cin >> x;
- rez &= x; }
- for(int i = 0; i < n; ++i){
- cout << rez << ' '; }
- cout << '\n';
- continue; }
- vector<int> buf(2*n);
- for(int i = n; i < 2*n; ++i){
- cin >> buf[i]; }
- for(int i = n-1; i > 0; --i){
- buf[i] = (buf[2*i] & buf[2*i+1]); }
- auto query = [&](int st, int dr){
- int rez = 0x7fffffff;
- for(st += n, dr += n+1; st < dr; st /= 2, dr /= 2){
- if(st%2){
- rez &= buf[st++]; }
- if(dr%2){
- rez &= buf[--dr]; } }
- return rez; };
- for(int i = 0, st = n-k, dr = k; i < n; ++i, ++st, ++dr,
- st = (st >= n ? st-n : st), dr = (dr >= n ? dr-n : dr)){
- cout << (st < dr ? query(st, dr) : query(0, dr) & query(st, n-1)) << ' '; }
- cout << '\n'; }
- return 0; }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement