社区讨论
申请撤下题解
P8955「VUSC」Card Tricks参与者 7已保存回复 12
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 12 条
- 当前快照
- 1 份
- 快照标识符
- @mhizjyvv
- 此快照首次捕获于
- 2025/11/03 18:16 4 个月前
- 此快照最后确认于
- 2025/11/03 19:33 4 个月前
rt,@BestCNSoda 的代码经验证只有 ,会在第一个点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 条回复,欢迎继续交流。
正在加载回复...