PAV
  • 2024-06-208.3 边界标识法
    8.3边界标识法参考书:《数据结构(C语言版)》严蔚敏#include<cstdio>constunsignedminiSize=1000;//head,foot,*SpacestructWORD{union{WORD*llink;//头部域,指向前驱节点WORD*uplink;//底部域,指向本节点头部};u
  • 2024-05-05E. Iva & Pav
    链接:https://codeforces.com/problemset/problem/1878/E洛谷链接:https://www.luogu.com.cn/problem/CF1878E知识点:st表+二分(我不知道为什么有的题解说不用二分...反正我的在第11个测试点会TLE)思路就是一样的,存储区间的位与,然后按照区间查询:st_query来看每个区间符不符合,注意,这里
  • 2024-03-02st表二分按位与_cf900_E. Iva & Pav
    目录题目概述思路想法参考代码做题反思题目概述原题参考:E.Iva&Pav给出长度为n的数组和m次询问,每次询问包括一个左区间l和一个整数k,要求给出最大的右区间的值使得al&al+1&...&ar>=k思路想法其实对二进制的几种运算随意看一下,可以发现:随着长度的增加,按位与的结果是保
  • 2024-02-12Linux 中 使用awk数组根据基因的PAV矩阵计算基因的存在频率
     001、测试数据[b20223040323@admin1test]$lsx_gather_pav.txt[b20223040323@admin1test]$catx_gather_pav.txt##测试数据;每一行是一个个体;每一列是一个基因;矩阵中的0表示基因在这个个体中缺失,1表示基因在这个个体中存在01111
  • 2024-01-1010 Iva & Pav
    首先这是一个离线的操作,所以可以用st表,所有区间的&运算结果求出来其次&运算是相同取1,不同取0。意味着值是不断变小的,所有我们可以二分找到答案#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=2e5+10;intst[N][30];inta[N];intquery
  • 2023-10-07Codeforces Round 900 (Div. 3) E. Iva & Pav (位运算)
    CodeforcesRound900(Div.3)E.Iva&Pav//思路:10^9转换为2^32上的位,进行位运算,a[x][i]为到x为止第i位的1个数前缀和//对于与运算,如果当前i的前缀和不为r-l+1,则这一位的与运算结果为0//当找到从左往右第一个位置i为1使得k在这位为0,则与运算前缀大于k//二分查找最后一
  • 2023-10-06CF1878E Iva & Pav
    思路要求从一个点开始最远可以选择那个点使得两点之间的数字的与大于等于\(k\),最开始想到的是提前预处理出每个点往后若干位的与,因为与只可能变小不可能变大,所以可以二分找到最远的位置,但是这样无论时间还是空间都会爆掉,所以我们考虑优化一下这个办法。既然不能把每个点的后面
  • 2023-09-28E. Iva & Pav
    E.Iva&Pav把每一项的数拆分成32位二进制,然后求前i项第j位二进制为1的前缀和,如果区间范围内的1等于区间范围,则是可行的,乘上对应位置的大小,每一位求和判断与k的大小二分+前缀和点击查看代码#include<bits/stdc++.h>usingnamespacestd;#defineLLlonglongconstintN
  • 2023-09-27[题解]CF1878E Iva & Pav
    CF是没题考了吧,每场都出二进制拆位。思路首先我们可以二分\(r\),因为\(r\)越大,按位与一定只会小于等于\(r\)小的情况。那么,我们可以用\(num_{i,j}\)记录\(a_j\)第\(i\)位的二进制情况。如果我们对\(num_{i,j}\)做一个前缀和,如果\(num_{i,r}-num_{i,l-1}=r