mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-12-17 04:33:02 +00:00
feat: 添加P6627.cpp实现区间异或查询功能
This commit is contained in:
parent
5f6c040750
commit
f72db3be3a
71
src/11/27/P6627.cpp
Normal file
71
src/11/27/P6627.cpp
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
#include <algorithm>
|
||||||
|
#include <cstdint>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <iostream>
|
||||||
|
#include <istream>
|
||||||
|
#include <map>
|
||||||
|
#include <vector>
|
||||||
|
using ll = int64_t;
|
||||||
|
#define printf
|
||||||
|
const ll inf=1e9+7;
|
||||||
|
ll n,anq,ans=-inf,ansi;
|
||||||
|
std::map<ll,ll> m;
|
||||||
|
std::vector<ll> l,r,w,a,b,t,xr,eq,nq;
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
std::iostream::sync_with_stdio(false);
|
||||||
|
std::cin.tie(nullptr);
|
||||||
|
|
||||||
|
std::cin>>n;
|
||||||
|
l.resize(n+1);r.resize(n+1);w.resize(n+1);a.resize(n+1);b.resize(n+1);t.resize(n+1);
|
||||||
|
for(ll i=1;i<=n;i++){
|
||||||
|
std::cin>>t[i];
|
||||||
|
if(t[i]==1){
|
||||||
|
std::cin>>l[i]>>r[i]>>w[i];
|
||||||
|
m[l[i]]=m[r[i]]=m[r[i]+1]=0;
|
||||||
|
}else if(t[i]==2){
|
||||||
|
std::cin>>a[i]>>w[i];
|
||||||
|
m[a[i]]=0;
|
||||||
|
}else{
|
||||||
|
std::cin>>b[i]>>w[i];
|
||||||
|
m[b[i]]=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ll idx=1;
|
||||||
|
for(auto&[k,v]:m){
|
||||||
|
v=idx++;
|
||||||
|
printf("k=%lld, v=%lld\n",k,v);
|
||||||
|
}
|
||||||
|
xr.resize(idx+1);
|
||||||
|
eq.resize(idx+1);nq.resize(idx+1);
|
||||||
|
for(ll i=1;i<=n;i++){
|
||||||
|
if(t[i]==1){
|
||||||
|
ll nl=m[l[i]],nr=m[r[i]];
|
||||||
|
xr[nl]^=w[i];
|
||||||
|
xr[nr+1]^=w[i];
|
||||||
|
}else if(t[i]==2){
|
||||||
|
ll na=m[a[i]];
|
||||||
|
eq[na]^=w[i];
|
||||||
|
}else{
|
||||||
|
ll nb=m[b[i]];
|
||||||
|
nq[nb]^=w[i];
|
||||||
|
anq^=w[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(ll i=1;i<=idx;i++){
|
||||||
|
xr[i]^=xr[i-1];
|
||||||
|
}
|
||||||
|
auto rp=m.begin();
|
||||||
|
for(ll i=1;i<idx;i++){
|
||||||
|
ll nans=0;
|
||||||
|
nans^=eq[i];
|
||||||
|
nans^=xr[i];
|
||||||
|
nans^=anq^nq[i];
|
||||||
|
if(nans>ans){
|
||||||
|
ansi=rp->first;
|
||||||
|
ans=nans;
|
||||||
|
}
|
||||||
|
rp++;
|
||||||
|
}
|
||||||
|
std::cout<<ans<<" "<<ansi<<"\n";
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user