题意如题,数据大概在:n,m<=104,0<=x<=109n,m<=10^4,0<=x<=10^9n,m<=104,0<=x<=109
将一个数字拆成二进制的样子,那么与,或运算对每一位都做一次,那么就转化成了区间加减法。
如果一个子区间全1或全0就可以回溯了,否则继续递归下去暴力改数字。
没找到原题,写了一份对拍的代码,可以造点数据对拍一下。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+7;
ll maxx[maxn<<2|1];
ll lazy[maxn<<2|1];
int is[maxn<<2|1][39];
int is01[maxn<<2|1][39];
void pushup(int k){
maxx[k]=max(maxx[k<<1],maxx[k<<1|1]);
for(int i=0;i<=30;++i){
if(is01[k<<1][i]==is01[k<<1|1][i]) is01[k][i]=is01[k<<1][i];
else is01[k][i]=2;
}
}
void pushup2(int k,int pos){
maxx[k]=max(maxx[k<<1],maxx[k<<1|1]);
if(is01[k<<1][pos]==is01[k<<1|1][pos]) is01[k][pos]=is01[k<<1][pos];
else is01[k][pos]=2;
}
void build(int l,int r,int k){
lazy[k]=0;
for(int i=0;i

博客探讨了如何将区间或、区间与转换为区间加减法的问题,涉及二进制表示和递归策略。文章指出,若子区间全为1或全为0则可直接处理,否则继续递归。文中提供了对拍代码以验证解决方案的正确性。
最低0.47元/天 解锁文章
405

被折叠的 条评论
为什么被折叠?



