2 条题解

  • 0
    @ 2025-10-8 16:49:47

    G69 前缀线性基+贪心法 CF1100F Ivan and Burgers

    #pragma optimize(2)
    #include<bits/stdc++.h>
    using namespace std;typedef long long LL;
    const int N=5e5+10,B=30;
    template<typename T>void qr(T &x)
    {
    	x=0;char c=getchar();
    	for(;!isdigit(c);c=getchar());
    	for(;isdigit(c);c=getchar())x=(x<<3)+(x<<1)+(c&15);
    }
    template<typename T>void qw(T x)
    {
    	if(x>=10)qw(x/10);
    	putchar(x%10+'0');
    }
    
    int a[N], bas[N][B+1];int pos[N][B+1];
    void ins(int x,int bass[],int poss[])
    {
    	int v=a[x];
    	for(int i=B;i>=0;i--)if((v>>i)&1)
    	{
    		if(!bass[i]){bass[i]=v,poss[i]=x;return ;}
    		if(poss[i]<x){swap(x,poss[i]);swap(v,bass[i]);}
    		v^=bass[i];
    	}
    }
    
    int main()
    {
    	int n;qr(n);
    	memset(bas[0],0,sizeof(bas[0]));memset(pos[0],0,sizeof(pos[0]));
    	for(int i=1;i<=n;i++)
    	{
    		qr(a[i]);
    		memcpy(bas[i],bas[i-1],sizeof(bas[i]));
    		memcpy(pos[i],pos[i-1],sizeof(pos[i]));
    		ins(i,bas[i],pos[i]);
    	}
    	int q,l,r;qr(q);
    	while(q--)
    	{
    		qr(l);qr(r);
    		int ans=0;
    		for(int i=B;i>=0;i--)if(pos[r][i]>=l)ans=max(ans,ans^bas[r][i]);
    		qw(ans);
    		putchar('\n');
    	}
    	return 0;
    }
    
    • 0
      @ 2025-10-8 16:49:41

      G69 前缀线性基+贪心法 CF1100F Ivan and Burgers

      #pragma optimize(2)
      #include<bits/stdc++.h>
      using namespace std;typedef long long LL;
      const int N=5e5+10,B=30;
      template<typename T>void qr(T &x)
      {
      	x=0;char c=getchar();
      	for(;!isdigit(c);c=getchar());
      	for(;isdigit(c);c=getchar())x=(x<<3)+(x<<1)+(c&15);
      }
      template<typename T>void qw(T x)
      {
      	if(x>=10)qw(x/10);
      	putchar(x%10+'0');
      }
      
      int a[N], bas[N][B+1];int pos[N][B+1];
      void ins(int x,int bass[],int poss[])
      {
      	int v=a[x];
      	for(int i=B;i>=0;i--)if((v>>i)&1)
      	{
      		if(!bass[i]){bass[i]=v,poss[i]=x;return ;}
      		if(poss[i]<x){swap(x,poss[i]);swap(v,bass[i]);}
      		v^=bass[i];
      	}
      }
      
      int main()
      {
      	int n;qr(n);
      	memset(bas[0],0,sizeof(bas[0]));memset(pos[0],0,sizeof(pos[0]));
      	for(int i=1;i<=n;i++)
      	{
      		qr(a[i]);
      		memcpy(bas[i],bas[i-1],sizeof(bas[i]));
      		memcpy(pos[i],pos[i-1],sizeof(pos[i]));
      		ins(i,bas[i],pos[i]);
      	}
      	int q,l,r;qr(q);
      	while(q--)
      	{
      		qr(l);qr(r);
      		int ans=0;
      		for(int i=B;i>=0;i--)if(pos[r][i]>=l)ans=max(ans,ans^bas[r][i]);
      		qw(ans);
      		putchar('\n');
      	}
      	return 0;
      }
      • 1

      G69*【前缀线性基+贪心】区间异或和最大 Ivan and Burgers

      信息

      ID
      356
      时间
      3000ms
      内存
      512MiB
      难度
      7
      标签
      递交数
      150
      已通过
      39
      上传者