60分求助
查看原帖
60分求助
489327
小熙熙楼主2023/3/31 10:34
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
#include<cmath>
#include<cstring>
#include<queue>
#include<map>
#include<vector>
#define bug cout<<"bug"<<endl
#define ll long long
#define inf 0x3f3f3f3f3f3f3f3f
using namespace std;
inline ll read(){	ll x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
const ll maxn=2e5+100;
ll n;
struct node{
	ll l,r;
	ll num;
	ll pos;
	ll flag;
}a[maxn];
ll b[maxn*10],f[maxn],refl[maxn*10];
ll top=0;
int main(){
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	for(ll i=1;i<=n;i++){
		cin>>a[i].flag;
		if(a[i].flag==1){
			cin>>a[i].l>>a[i].r>>a[i].num;
			b[++top]=a[i].r;
			b[++top]=a[i].l;
		}
		else{
			cin>>a[i].pos>>a[i].num;
			b[++top]=a[i].pos;
		}
	}
	b[++top]=(ll)(1e9);
	b[++top]=(ll)(-1e9);
	b[++top]=0;
	sort(b+1,b+top+1);
	ll tt=unique(b+1,b+top+1)-(b+1);
	ll maxx=0;
	for(ll i=1;i<=n;i++){
		if(a[i].flag==1){
			ll t1=a[i].l,t2=a[i].r;
			ll t3=lower_bound(b+1,b+tt+1,t1)-b;
			ll t4=lower_bound(b+1,b+tt+1,t2)-b;
			refl[t3]=t1;
			refl[t4]=t2;
			a[i].l=t3,a[i].r=t4;
		}
		else{
			ll t1=a[i].pos;
			ll t2=lower_bound(b+1,b+tt+1,t1)-b;
			refl[t2]=t1;
			if(a[i].flag==2) a[i].l=a[i].r=t2;
			else a[i].pos=t2;
		}
	} 
	ll t1=(ll)1e9,t2=(ll)-1e9;
	ll t3=lower_bound(b+1,b+tt+1,t1)-b;
	ll t4=lower_bound(b+1,b+tt+1,t2)-b;
	refl[t3]=t1;
	refl[t4]=t2;
	maxx=t3;
	ll t5=lower_bound(b+1,b+tt+1,0)-b;
	refl[t5]=0;
	for(ll i=1;i<=n;i++){
		if(a[i].flag==2||a[i].flag==1){
			f[a[i].l]^=a[i].num;
			f[a[i].r+1]^=a[i].num;
		}
		else{
			f[1]^=a[i].num;
			f[a[i].pos]^=a[i].num;
			f[a[i].pos+1]^=a[i].num;
		}
	}
//	cout<<maxx<<"\n";
	ll ans=-inf;
	ll sum=0;
	ll ppos=inf;
	for(ll i=1;i<=maxx;i++){
		sum^=f[i];
		if(sum>ans){ans=sum;ppos=refl[i];}
		else if(sum==ans&&abs(ppos)>=abs(refl[i])){ppos=refl[i];}
	}
	cout<<ans<<" "<<ppos<<"\n";
	return 0;
}

2023/3/31 10:34
加载中...