线性基模板

  • 插入
  • k
  • 排名
  • 最大异或和
struct Basis
{
	vector<ll>s;
	
	void insert(ll val)
	{
		for(int x:s)val=min(val,val^x);
		for(int &x:s)x=min(x,x^val);
		if(val)s.push_back(val);
	}
	ll kth(ll k)
	{
		sort(s.begin(),s.end());
		if(s.size()<n)k--;
		ll res=0;
		for(ll x:s)
		{
			if(k&1)res^=x;
			k>>=1;
		}
		return !k?res:-1;
	}
	ll rk(ll val)
	{
		sort(s.begin(),s.end());
		ll res=0;
		for(int i=0;i<s.size();i++)
			if((val^s[i])<val)res|=1ll<<i;
		return res+1;
	}
	ll mx(ll val)
	{
		sort(s.begin(),s.end(),greater<ll>());
		for(ll x:s)val=max(val,(val^x));
		return val;
	}
}S;
posted @   Zwb0106  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示