0
点赞
收藏
分享

微信扫一扫

2694: 发通知

慕犹清 2022-05-01 阅读 10

发通知
用map遍历数组求出人数和异或值
auto解决了手写map遍历 (虽然时间比手写map遍历长,但是胜在简便)
用前缀和存储人数变化和异或值变化
注:a ^ b ^ b =a

#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<map>
using namespace std;
map<int ,int>m1;//人数 
map<int ,int>m2;//异或值 
void add(int x,int w,int cnt)
{
	m1[x]+=cnt;
	m2[x]^=w;
}
int main()
{
	int i,j,k,n,num,num1,num2;
	scanf("%d %d",&n,&k);
	for(i=1;i<=n;i++)
	{
		int a,b,w;
		scanf("%d %d %d",&a,&b,&w);
		add(a,w,1);
		add(b+1,w,-1);
	}
	num=-1;//异或最大值 
	num1=0;//当前异或值 
	num2=0;//当前人数 
	for(auto x:m1)
	{
		num1^=m2[x.first];
		num2+=m1[x.first];
		if(num2>=k) num=max(num,num1);
	}
	printf("%d\n",num);
	return 0;
}
举报

相关推荐

0 条评论