CodeForces-483D Interesting Array 线段树拆位
让你构造一个数列,满足m
种限制条件,每种限制条件是l,r,x
,要求构造的序列区间[l,r]
与运算的值结果为x
。
注意到如果某一位上&运算的结果为1的话,该区间内所有元素都要是1
先把需要是1的地方拎出来处理,相当于区间操作,写个lazytag;
然后再考虑0,显然如果为0,区间内只要有1个0就可以了,问题转化成该区间内能否找到一个位置为0
找到的话返回编号
构造的时候根据每一位是否为0累加一下随便构就好了
但是这样写的时间复杂度是log*log,实测t了第36个点
猜测可能是结构体数组开大,结构体又慢,然后我树常数也写大了
加了个c++火车头982ms卡过去了,火车头:https://www.cnblogs.com/liyishui2003/p/16652191.html
code:
#include<bits/stdc++.h> #define ls (rt<<1) #define rs (rt<<1|1) #define fastio ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0) #pragma GCC optimize(3) #pragma GCC target("avx") #pragma GCC optimize("Ofast") #pragma GCC optimize("inline") #pragma GCC optimize("-fgcse") #pragma GCC optimize("-fgcse-lm") #pragma GCC optimize("-fipa-sra") #pragma GCC optimize("-ftree-pre") #pragma GCC optimize("-ftree-vrp") #pragma GCC optimize("-fpeephole2") #pragma GCC optimize("-ffast-math") #pragma GCC optimize("-fsched-spec") #pragma GCC optimize("unroll-loops") #pragma GCC optimize("-falign-jumps") #pragma GCC optimize("-falign-loops") #pragma GCC optimize("-falign-labels") #pragma GCC optimize("-fdevirtualize") #pragma GCC optimize("-fcaller-saves") #pragma GCC optimize("-fcrossjumping") #pragma GCC optimize("-fthread-jumps") #pragma GCC optimize("-funroll-loops") #pragma GCC optimize("-fwhole-program") #pragma GCC optimize("-freorder-blocks") #pragma GCC optimize("-fschedule-insns") #pragma GCC optimize("inline-functions") #pragma GCC optimize("-ftree-tail-merge") #pragma GCC optimize("-fschedule-insns2") #pragma GCC optimize("-fstrict-aliasing") #pragma GCC optimize("-fstrict-overflow") #pragma GCC optimize("-falign-functions") #pragma GCC optimize("-fcse-skip-blocks") #pragma GCC optimize("-fcse-follow-jumps") #pragma GCC optimize("-fsched-interblock") #pragma GCC optimize("-fpartial-inlining") #pragma GCC optimize("no-stack-protector") #pragma GCC optimize("-freorder-functions") #pragma GCC optimize("-findirect-inlining") #pragma GCC optimize("-fhoist-adjacent-loads") #pragma GCC optimize("-frerun-cse-after-loop") #pragma GCC optimize("inline-small-functions") #pragma GCC optimize("-finline-small-functions") #pragma GCC optimize("-ftree-switch-conversion") #pragma GCC optimize("-foptimize-sibling-calls") #pragma GCC optimize("-fexpensive-optimizations") #pragma GCC optimize("-funsafe-loop-optimizations") #pragma GCC optimize("inline-functions-called-once") #pragma GCC optimize("-fdelete-null-pointer-checks") #pragma GCC optimize(2) using namespace std; const int maxn=1e5+5; struct seg{ int l,r,lazy; }t[31][maxn<<2]; void push_up(){ } void push_down(int w,int rt){ if(!t[w][rt].lazy){ return; } else { t[w][ls].lazy=1; t[w][rs].lazy=1; t[w][rt].lazy=0; } } void build(int w,int rt,int l,int r){ t[w][rt].l=l;t[w][rt].r=r; if(l==r){ t[w][rt].lazy=0; return; } int mid=(l+r)>>1; build(w,ls,l,mid);build(w,rs,mid+1,r); } void update(int w,int rt,int l,int r){ if(l<=t[w][rt].l&&t[w][rt].r<=r){ // update t[w][rt].lazy=1; return; } if(t[w][ls].r>=l) update(w,ls,l,r); if(t[w][rs].l<=r) update(w,rs,l,r); } int query(int w,int rt,int l,int r){ if(l<=t[w][rt].l&&t[w][rt].r<=r){ if(t[w][rt].lazy==1) return 0; } if(t[w][rt].l==t[w][rt].r){ if(t[w][rt].lazy==0) return t[w][rt].l; else return 0; } int ans=0; if(t[w][ls].r>=l&&!t[w][ls].lazy) ans=query(w,ls,l,r);// if(ans) return ans; if(t[w][rs].l<=r&&!t[w][rs].lazy) ans=query(w,rs,l,r);// return ans; } int n,m,l[maxn],r[maxn],q[maxn]; int ans[31][maxn]; int main(){ //freopen("lys.in","r",stdin); fastio; cin>>n>>m; for(int i=1;i<=m;i++) cin>>l[i]>>r[i]>>q[i]; for(int j=0;j<30;j++) build(j,1,1,n); // deal with 1 for(int j=0;j<30;j++){ for(int i=1;i<=m;i++){ if(q[i]&(1<<j)){ update(j,1,l[i],r[i]); } else { //do nothing } } } for(int j=0;j<30;j++){ for(int i=1;i<=m;i++){ if(q[i]&(1<<j)){ //do nothing } else { int se=query(j,1,l[i],r[i]);// se 为第j棵线段树下为0 的位置 if(se){ ans[j][se]=1; } else { cout<<"NO";return 0; } } } } cout<<"YES"<<endl; for(int i=1;i<=n;i++){ int out=0; for(int j=0;j<30;j++){ if(ans[j][i]==0) out+=1<<j; } cout<<out<<" "; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)