社区讨论

90pts求调,玄关

P6627[省选联考 2020 B 卷] 幸运数字参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mig23cay
此快照首次捕获于
2025/11/26 21:44
3 个月前
此快照最后确认于
2025/11/26 22:29
3 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
map<int,int> ma;
map<int,int> beg;
int n;
int op;
struct node{
	int l,r,w;
	int fei;
	int a;
};
int cnt;
node f[1000006];
int ff[1000006];
int cha[1000005];
int maxn=0;
int maxp=0;
signed main(){
	cin>>n;
	int l,r,w,a;
	for(int i=1;i<=n;i++){
		cin>>op;
		if(op==1){
			cin>>l>>r>>w;
			f[i].l=l;
			f[i].r=r;
			f[i].w=w;
		}
		else if(op==2){
			cin>>a>>w;
			f[i].w=w;
			f[i].a=a;
		}
		else{
			cin>>a>>w;
			f[i].fei=1;
			f[i].w=w;
			f[i].a=a;
		}
	}
	for(int i=1;i<=n;i++){
		if(f[i].l!=f[i].r){
			ff[++cnt]=f[i].l;
			ff[++cnt]=f[i].l-1;
			ff[++cnt]=f[i].r+1;
			ff[++cnt]=f[i].r;
		}
		else ff[++cnt]=f[i].a,ff[++cnt]=f[i].a+1;
	}
	ff[++cnt]=0;
	sort(ff+1,ff+cnt+1);
	int k=0;
	for(int i=1;i<=cnt;i++){
		if(i==1||ff[i]!=ff[i-1]){
			k++;
			ma[ff[i]]=k;
			beg[k]=ff[i];
		}
	}
	cnt=k;
	for(int i=1;i<=n;i++){
		if(f[i].l!=f[i].r){
			f[i].l=ma[f[i].l];
			f[i].r=ma[f[i].r];
		}
		else f[i].a=ma[f[i].a];
	//	cout<<f[i].l<<" "<<f[i].r<<" "<<f[i].a<<" "<<f[i].w<<endl;
	}
	for(int i=1;i<=n;i++){
		if(f[i].l!=f[i].r){
			cha[f[i].l]^=f[i].w;
			cha[f[i].r+1]^=f[i].w;
		}
		else if(f[i].fei){
			cha[1]^=f[i].w;
			cha[f[i].a]^=f[i].w;
			cha[f[i].a+1]^=f[i].w;
			cha[cnt+1]^=f[i].w;
		}
		else{
			cha[f[i].a]^=f[i].w;
			cha[f[i].a+1]^=f[i].w;
		}
	}
	int last=0;

	for(int i=1;i<=k;i++){
		last=cha[i]^last;
		int v=last;
		if(v>maxn||(v==maxn&&(llabs(beg[i])<llabs(maxp)||llabs(beg[i])==llabs(maxp)&&beg[i]>maxp))){
			maxn=v;
			maxp=beg[i];
		}
	}
	cout<<maxn<<" "<<maxp;
	return 0;
}

回复

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

正在加载回复...