[题解]CF1878E Iva & Pav

CF 是没题考了吧,每场都出二进制拆位。

思路

首先我们可以二分 r,因为 r 越大,按位与一定只会小于等于 r 小的情况。

那么,我们可以用 numi,j 记录 aji 位的二进制情况。

如果我们对 numi,j 做一个前缀和,如果 numi,rnumi,l1=rl+1,说明 [l,r] 中第 i 位都是 1,那么它对按位与的贡献就有 2i

Code

#include <bits/stdc++.h>  
#define re register  
#define int long long  
  
using namespace std;  
  
const int N = 2e5 + 10,M = 34;  
int T,n,q;  
int arr[N];  
int num[M][N];  
  
inline int read(){  
    int r = 0,w = 1;  
    char c = getchar();  
    while (c < '0' || c > '9'){  
        if (c == '-') w = -1;  
        c = getchar();  
    }  
    while (c >= '0' && c <= '9'){  
        r = (r << 3) + (r << 1) + (c ^ 48);  
        c = getchar();  
    }  
    return r * w;  
}  
  
inline bool check(int l,int r,int k){  
    int sum = 0;  
    for (re int bit = 0;bit <= 30;bit++){  
        int cnt = num[bit][r] - num[bit][l - 1];  
        if (cnt == r - l + 1) sum += (1ll << bit);  
    }  
    return (sum >= k);  
}  
  
signed main(){  
    T = read();  
    while (T--){  
        n = read();  
        for (re int i = 0;i <= 30;i++){  
            for (re int j = 1;j <= n;j++) num[i][j] = 0;  
        }  
        for (re int i = 1;i <= n;i++){  
            arr[i] = read();  
            for (re int bit = 0;bit <= 30;bit++){  
                if (arr[i] >> bit & 1) num[bit][i] = 1;  
                num[bit][i] += num[bit][i - 1];  
            }  
        }  
        q = read();  
        while (q--){  
            int l,L,r = n,x;  
            L = l = read();  
            x = read();  
            while (l < r){  
                int mid = l + r + 1 >> 1;  
                if (check(L,mid,x)) l = mid;  
                else r = mid - 1;  
            }  
            if (check(L,l,x)) printf("%lld ",l);  
            else printf("-1 ");  
        }  
        puts("");  
    }  
    return 0;  
}  

作者:WaterSun

出处:https://www.cnblogs.com/WaterSun/p/18266721

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   WBIKPS  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示