社区讨论

申请撤下题解

P8955「VUSC」Card Tricks参与者 7已保存回复 12

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
12 条
当前快照
1 份
快照标识符
@mhizjyvv
此快照首次捕获于
2025/11/03 18:16
4 个月前
此快照最后确认于
2025/11/03 19:33
4 个月前
查看原帖
rt,@BestCNSoda 的代码经验证只有 90pts90pts,会在第一个点WA。
附上自己写的,最开始还以为是我自己的问题……
CPP
#include<bits/stdc++.h>
#define ls p*2
#define rs p*2+1 
#define mid (l+(r-l)/2)
using namespace std;
typedef int ll;
const ll N=4e6;
ll n,q,lim,rt=0;
vector<ll>a(1000006);
vector<vector<pair<ll,ll>>>e(1000006);
struct segtree{
	ll ans[N],idx=0;
//	void pushdown(ll p,ll l,ll r){
//		if(!ls[p])ls[p]=++idx;if(!rs[p])rs[p]=++idx;
//		ans[ls[p]]+=tag[p]*(mid-l+1),tag[ls[p]]+=tag[p];
//		ans[rs[p]]+=tag[p]*(r-mid),tag[rs[p]]+=tag[p];
//		tag[p]=0;
//	}
	void upd(ll pos,ll l,ll r,ll p,ll k){
		if(l==r){
			ans[p]=k;
			return;
		}
		if(pos<=mid)upd(pos,l,mid,ls,k);
		else upd(pos,mid+1,r,rs,k);
		ans[p]=ans[ls]|ans[rs];
	}
	ll qry(ll l,ll r,ll p,ll md){
		if(l==r){
			if((md|ans[p])<lim)return -1;
			return l;
		}
		if((ans[ls]|md)>lim)return qry(l,mid,ls,md);
		else return qry(mid+1,r,rs,md|ans[ls]);
	}
}T;
int main(){
	cin>>n>>q>>lim;
    for(ll i=1,x;i<=n;i++){
        cin>>a[i];
    }
    for(ll i=1,u,v,w;i<=q;i++){
    	cin>>u>>v>>w;
    	e[u].emplace_back(i,w);
    	e[v+1].emplace_back(i,0);
	}
	for(ll i=1;i<=n;i++){
		reverse(e[i].begin(), e[i].end());
		for(auto [v,w]:e[i]){
			T.upd(v,1,q,1,w);
		}
		cout<<T.qry(1,q,1,a[i])<<" ";
	}
}

回复

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

正在加载回复...