首页 > 其他分享 >牛客练习赛112 B qsgg and Subarray

牛客练习赛112 B qsgg and Subarray

时间:2023-06-28 20:37:14浏览次数:50  
标签:练习赛 int res mid long 牛客 区间 Subarray include

这里介绍两种解法,贪心和二分

核心:只要某一个区间和为0,则所有包含该区间的和都为0

贪心

根据题意是求出所有⊕和为0的子区间的个数,我们按a[i]来分类,每次求出以a[i]为末尾,区间和为0的区间个数,对于a[i]来说,要想u~i的区间和为0,则需要包含所有a[i]中位为1都有0与之对应,如果u~i的区间和为0的话则,所有包含该区间的区间和都为0,因此区间个数为u

 

#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <set>
#include <utility>
#include <vector>
#include <queue>
#include <map>
using namespace std;
const int N=1e6+10;
int a[N],last[N];//last[i]记录的是第i位为0的最右边的下标
int n;
void solve(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	long long res=0;
	for(int i=1;i<=n;i++){
		int k=a[i];
		int x=N;
		for(int j=1;j<=32;j++){
			if(k&1){
				x=min(x,last[j]);
			}
			else last[j]=i;//及时更新下标为最靠右的,才能使得区间最小
			k>>=1;
		}
		if(x==N) x=i;//如果x==N则说明a[i]==0,则区间个数为i
		res+=x;
	}
	cout<<res;
}
int main(){
		solve();
}

 二分

我们发现只要子区间为0,父区间一定为0,因此我们可以二分求出,i~mid--1区间不为0,i~mid一直到i~n的区间都为0

#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <set>
#include <utility>
#include <vector>
#include <queue>
#include <map>
using namespace std;
const int N=1e6+10,M=32;
int a[N],v[N][M];//v[i][j]记录前i个数字中第j位为1的个数
int n;
bool check(int l,int r){//如果对于每一位来说,必须至少存在某一个数字该位为0这样整个区间的区间和才会为0
	for(int i=1;i<=32;i++){
		if(v[r][i]-v[l][i]==r-l) return true;//如果个数和区间长度相等,说明存在某一位,该区间里所有的数字这一位都为1
	}
	return false;
} 
void solve(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		int k=a[i];
		for(int j=1;j<=32;j++){
			v[i][j]=v[i-1][j];
			if(k&1) v[i][j]++;
			k>>=1;
		}
	}
	long long res=0;
	for(int i=1;i<=n;i++){
		int l=i,r=n+1;
		while(l<r){
			int mid=l+r>>1;
			if(check(i-1,mid)) l=mid+1;
			else r=mid;
		}
		res+=n-l+1;//这里sum[i->l]~sum[i->n]的区间和都为0
	}
	cout<<res;
}
int main(){
		solve();
}

 

标签:练习赛,int,res,mid,long,牛客,区间,Subarray,include
From: https://www.cnblogs.com/liyiyang/p/17512481.html

相关文章

  • Coloring Tree (牛客多校) (BFS序列妙用+ f(n)-f(n+1)+ 组合数学)
    题目大意:给一个树,然后有k种颜色可以给树上色权值是2个相同颜色节点的最短距离问让权值为D的方案数 题解:首先要让2个节点为D,怎么处理呢?利用f(D)-f(D+1)即可因为问的是2个相同颜色点的最短距离,因此直接bfs用一个bfs序列然后在bfs一下,因为之前co......
  • Distance to Work (牛客多校) (圆和简单多边形相交面积 + 二分半径)
    #include<bits/stdc++.h>usingnamespacestd;constdoubleeps=1e-9;//浮点数精度控制#defineVectorpoint#definePointpointconstdoublePI=acos(-1);structPoint{doublex,y;Point(doublex=0,doubley=0):x(x),y(y){}friendVe......
  • Shuffle Cards (牛客多校) (rope 块状链表 用作可持续优化平衡树, 用于区间的整体移动
    rope:#include<ext/rope>usingnamespace__gnu_cxx; 定义方法:rope<变量类型>变量名称;人话解释:超级string算法解释:块状链表(即讲链表与数组的优势结合,形成分块思想)用途解释:这本来是一个用于快速操作string的工具,却一般被定义成int,然后用作可持久化线段树!insert(intpos,s......
  • PACM Team (牛客多校) (DP 01背包, 维度较多)
    题目大意:给出n个物品,物品有4个空间值,然后有一个权值问在不超过最大的空间值时,最大的权值  思路:一开始想了很多其他思路没有想出来开始广搜算法,发现dp可以解决(注意看数据范围,是满足的)遇到奇怪的题,就试试dp,特别在数据范围很小的时候 ......
  • 牛客网刷题三
    牛客网刷题21-24这块主要是时序逻辑第21题根据状态转移表实现时序电路_牛客题霸_牛客网(nowcoder.com)`timescale1ns/1nsmoduleseq_circuit(inputA,inputclk,inputrst_n,outputw......
  • 牛客网刷题4
    25-2825题输入序列连续的序列检测_牛客题霸_牛客网(nowcoder.com)`timescale1ns/1nsmodulesequence_detect( inputclk, inputrst_n, inputa, outputregmatch );reg[8:0]tmp;//存储always@(posedgeclkornegedgerst_n)beginif(!rst_n)begin......
  • 牛客网刷题二
    牛客网FPGA题库刷题之快速入门题库(一)9~13题14-20没啥用就是看图写,不需要做了第九题题目链接使用子模块实现三输入数的大小比较代码`timescale1ns/1nsmodulemain_mod(inputclk,inputrst_n,input[7:0]a,input[7:0]b,input[7:0]c,output[7:0]d);......
  • 牛客题解-mixup2混乱的奶牛(状压dp)
    题解-mixup2混乱的奶牛[原题连接](1026-mixup2混乱的奶牛_2021秋季算法入门班第八章习题:动态规划2(nowcoder.com))题目描述混乱的奶牛[DonPiele,2007]FarmerJohn的N(4<=N<=16)头奶牛中的每一头都有一个唯一的编号S_i(1<=S_i<=25,000).奶牛为她们的编号感到骄傲......
  • 牛客竞赛刷题模板
    牛客竞赛自用,便于复制for(letT=parseInt(readline());T>0;T--){const[n,m]=readline().split('',2).map(v=>parseInt(v));constnums=readline().split('',n).map(v=>parseInt(v));letsum=0;constsub......
  • [LeetCode] 2090. K Radius Subarray Averages
    Youaregivena 0-indexed array nums of n integers,andaninteger k.The k-radiusaverage forasubarrayof nums centered atsomeindex i withthe radius k istheaverageof all elementsin nums betweentheindices i-k and i+k (i......