社区讨论

求助卡常

学术版参与者 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;
}
加快 6ms6\text{ms} 即可。

回复

6 条回复,欢迎继续交流。

正在加载回复...