发通知
用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;
}