社区讨论
求助卡常
学术版参与者 3已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @m2fl1e7g
- 此快照首次捕获于
- 2024/10/19 11:11 去年
- 此快照最后确认于
- 2025/11/04 16:52 4 个月前
代码:
CPP#include<bits/stdc++.h>
#define MAXN 1000010
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
#define putchar putchar_unlocked
#define opt optimize
#define tar target
//#pragma GCC tar("avx")
//#pragma GCC opt(2)
//#pragma GCC opt(3)
//#pragma GCC opt("Ofast")
//#pragma GCC opt("inline")
//#pragma GCC opt("unroll-loops")
//#pragma GCC opt("inline-functions")
//#pragma GCC opt("no-stack-protector")
//#pragma GCC opt("inline-small-functions")
//#pragma GCC opt("inline-functions-called-once")
#pragma GCC opt(3)
#pragma GCC tar("avx")
#pragma GCC opt("Ofast")
#pragma GCC opt("inline")
#pragma GCC opt("-fgcse")
#pragma GCC opt("-fgcse-lm")
#pragma GCC opt("-fipa-sra")
#pragma GCC opt("-ftree-pre")
#pragma GCC opt("-ftree-vrp")
#pragma GCC opt("-fpeephole2")
#pragma GCC opt("-ffast-math")
#pragma GCC opt("-fsched-spec")
#pragma GCC opt("unroll-loops")
#pragma GCC opt("-falign-jumps")
#pragma GCC opt("-falign-loops")
#pragma GCC opt("-falign-labels")
#pragma GCC opt("-fdevirtualize")
#pragma GCC opt("-fcaller-saves")
#pragma GCC opt("-fcrossjumping")
#pragma GCC opt("-fthread-jumps")
#pragma GCC opt("-funroll-loops")
#pragma GCC opt("-fwhole-program")
#pragma GCC opt("-freorder-blocks")
#pragma GCC opt("-fschedule-insns")
#pragma GCC opt("inline-functions")
#pragma GCC opt("-ftree-tail-merge")
#pragma GCC opt("-fschedule-insns2")
#pragma GCC opt("-fstrict-aliasing")
#pragma GCC opt("-fstrict-overflow")
#pragma GCC opt("-falign-functions")
#pragma GCC opt("-fcse-skip-blocks")
#pragma GCC opt("-fcse-follow-jumps")
#pragma GCC opt("-fsched-interblock")
#pragma GCC opt("-fpartial-inlining")
#pragma GCC opt("no-stack-protector")
#pragma GCC opt("-freorder-functions")
#pragma GCC opt("-findirect-inlining")
#pragma GCC opt("-fhoist-adjacent-loads")
#pragma GCC opt("-frerun-cse-after-loop")
#pragma GCC opt("inline-small-functions")
#pragma GCC opt("-finline-small-functions")
#pragma GCC opt("-ftree-switch-conversion")
#pragma GCC opt("-foptimize-sibling-calls")
#pragma GCC opt("-fexpensive-optimizations")
#pragma GCC opt("-funsafe-loop-optimizations")
#pragma GCC opt("inline-functions-called-once")
#pragma GCC opt("-fdelete-null-pointer-checks")
#pragma GCC opt(2)
using namespace std;
struct node{
int l,r,w;
}que[MAXN];
struct Node{
int val,lazy;
}tree[MAXN<<2];
int n,q,p,a[MAXN],b[MAXN],c[MAXN],ans[MAXN],lson[MAXN],rson[MAXN];
char buf[1<<23],*p1=buf,*p2=buf,obuf[1<<23],*O=obuf;
inline int read(){
register int res=0;
register char c=getchar();
while(!isdigit(c)){
c=getchar();
}
while(isdigit(c)){
res=(res<<1)+(res<<3)+(c^48);
c=getchar();
}
return res;
}
inline void write(const int ans){
if(ans>9){
write(ans/10);
}
putchar(ans%10+'0');
}
inline void push_down(const int root){
const int lazy=tree[root].lazy;
tree[root<<1].lazy|=lazy;
tree[root<<1].val|=lazy;
tree[root<<1|1].lazy|=lazy;
tree[root<<1|1].val|=lazy;
tree[root].lazy=0;
}
inline void change(const int root,const int l,const int r,const int L,const int R,const int val){
if(L<=l&&r<=R){
tree[root].lazy|=val;
tree[root].val|=val;
return;
}
const int mid=(l+r)>>1;
push_down(root);
if(L<=mid){
change(root<<1,l,mid,L,R,val);
}
if(mid<R){
change(root<<1|1,mid+1,r,L,R,val);
}
}
inline int query(const int root,const int l,const int r,const int Q){
if(l==r){
return tree[root].val;
}
const int mid=(l+r)>>1;
push_down(root);
if(Q<=mid){
return query(root<<1,l,mid,Q);
}
return query(root<<1|1,mid+1,r,Q);
}
inline void modify(const int root,const int l,const int r,const int Q,const int val){
if(l==r){
tree[root].val=val;
return;
}
const int mid=(l+r)>>1;
push_down(root);
if(Q<=mid){
modify(root<<1,l,mid,Q,val);
}else{
modify(root<<1|1,mid+1,r,Q,val);
}
}
inline void solve(const int l,const int r,const int L,const int R){
if(l>r){
return;
}
if(L==R){
for(register int i=l;i<=r;++i){
ans[b[i]]=L;
}
return;
}
const int mid=(L+R)>>1;
register int ltop=0,rtop=0;
for(register int i=L;i<=mid;++i){
change(1,1,n,que[i].l,que[i].r,que[i].w);
}
for(register int i=l;i<=r;++i){
const int sum=query(1,1,n,b[i]);
if((sum|a[b[i]])<=p){
c[b[i]]|=sum;
rson[++rtop]=b[i];
}else{
lson[++ltop]=b[i];
}
modify(1,1,n,b[i],c[b[i]]);
}
for(register int i=1;i<=ltop;++i){
b[i+l-1]=lson[i];
}
for(register int i=1;i<=rtop;++i){
b[i+l+ltop-1]=rson[i];
}
solve(l,l+ltop-1,L,mid);
solve(l+ltop,r,mid+1,R);
}
int main(){
n=read();
q=read();
p=read();
que[q+1]=((node){1,n,p});
for(register int i=1;i<=n;++i){
a[i]=read();
b[i]=i;
}
for(register int i=1;i<=q;++i){
que[i].l=read();
que[i].r=read();
que[i].w=read();
}
solve(1,n,1,q+1);
for(register int i=1;i<=n;++i){
if(ans[i]==q+1){
putchar('-');
putchar('1');
}else{
write(ans[i]);
}
putchar(' ');
}
return 0;
}
加快 即可。
回复
共 6 条回复,欢迎继续交流。
正在加载回复...