
数据结构 ------ 基础
文章平均质量分 59
orz11111111
这个作者很懒,什么都没留下…
展开
-
CF 876F High City 单调栈,枚举,或运算
Problem F题意:给出长度为n的序列a,问有多少个区间[L,R]满足 a[L]|a[L+1]|...a[R] >max(a[L],...a[R]).n先用单调栈O(n)求出a[i]最为最大值的区间[L,R].找到a[i]最左边(右边)a[j] 满足 a[i]|a[i-1]|..a[j] >a[i] 即a[j]二进制中存在a[i]没有的bit.[x,y].即a[i]原创 2017-10-17 17:04:58 · 197 阅读 · 0 评论 -
HDU 6406 Taotao Picks Apples 线段树,模拟,单调栈
题意:长度为n的序列a,每次从第一个数开始,拿一个严格大于上次拿的数.m次询问:问将a[p]=x时,总共能拿多少个数? n,m<=1e5, 1<=a[i]<=1e9.当a[p]变为x时, 要先找到[1:p-1]中选的最后一个y.此时只要找到[p+1,n]中第一个比max(x,y)大的下标q.线段树维护最值来即可.预处理出d1[i]表示前缀i选的个数. 以及d2[i...原创 2018-11-03 22:11:32 · 131 阅读 · 0 评论 -
HDU 6356 Glad You Came 区间操作分解,倍增
刚开题面 式子有点多...不要慌..只是生成操作的数据.(防止因为读入超时.)题意:长度为n的序列a,初始为0, m次操作(l[i],r[i],v[i]) j=[l[i],r[i]] 若a[j]<v[i] 则令a[j]=v[i].n<=1e5,m<=5e6. 输出m次操作后,序列a的异或和.若两个操作的区间都相同,显然其作用的只有v值较大的那一个.另d=log2(...原创 2018-10-26 17:21:59 · 146 阅读 · 0 评论 -
HDU 6315 Naive Operations 暴力,线段树
题意:给出长度为n的排列b,初始全部为0的序列a.操作1:将a[L:R]的元素 + 1.操作2:询问SUM(a[i]/b[i]) i=[L:R].n,Q<=1e5.因为b是排列并且每次操作都是将一段区间的值加1, 那么SUM(a[i]/b[[i])的答案不会超过nlogn.(q/1+q/2+q/....q/n.)基本思路:令t[i]为还需要加多少 才能使val=(a[i]/b[...原创 2018-10-26 17:14:48 · 135 阅读 · 0 评论 -
牛客 湘潭18 H-統計顔色 位運算+綫段樹
题意:长度为n的序列a,每个a[i]都是一个桶,可以放无限个球,m次操作操作1:向[l,r]内的桶放入一个颜色为c的球.操作2:询问[l,r]内有多少个不同的数?n,m线段树每个节点保存61位的二进制数.其第i位为1,表示[l,r]中有存在颜色i.涉及到的操作只有:懒标记和区间置位..复习:在线段树上定位一个区间的复杂度为O(logn).加上lazy就可以使区间upda原创 2018-04-27 11:04:35 · 147 阅读 · 0 评论 -
CF 961E Tufurama 离散化+树状数组
题意:n个个电视剧,第i个电视剧有a[i]集. 可以用二元组(x,y)来表示某集电视剧.若(x,y),(y,x)这两集都存在,则称(x,y),(y,x)为一个合法对.n当x=i 则y要满足:i=i容易用树状数组求出后缀i中 a[y]>=i的个数.因为要在点a[i]+1时计算 后缀a[y]>=i的个数 所以要记录v[p][i]:表示在p点要计算>=i的个数.#includ原创 2018-04-05 11:09:37 · 278 阅读 · 0 评论 -
CC March18 Pishty And Triangle 线段树合并信息(三角形,斐波那契)
题意:长度为n的数列a,Q次操作.操作1:给出(pos,x) 令a[pos]=x操作2:给出[L,R] 问(a[L],a[L+1]..a[R]) 能组成的三角形中周长最长的为多少?n,Q先来一个暴力的解法:对每个询问,枚举当前区间[l,r]第i个数作为最大值时,因为三角形两边之和要大于第三边,所以剩下两个边在小于a[i]的情况下,显然越大越好.对当前区间原创 2018-03-12 23:30:02 · 388 阅读 · 0 评论 -
CF 915E. Physical Education Lessons 思维+set维护
题意:初始有序列a为n个2,Q次操作.操作1:将[l,r]的点变为1.操作2:将[l,r]的点变为2.在每次操作过后输出序列a有多少个2.n将[l,r]内的数置成0/1,区间置位.但是n太大.q定义一个set来维护二元组[L,R] 表示为1的区间.并且每个区间在set中不相交 按R升序排列.当op==2时 在set中删除和[L,R]有交集的区间并且插入多原创 2018-01-20 21:37:44 · 343 阅读 · 0 评论 -
HDU 2818 Building Blocks 带权并查集
题意:n堆盒子 初始第i堆放盒子i. Q次操作.操作1: 将包含盒子x的那一堆,放在包含盒子y的那一堆上方.(x,y在同一堆则不操作).操作2: 算出有多少个盒子在x的下方.n用并查集把相同堆的盒子连接在一起.cnt[i]维护每个点到其根节点的距离(底部盒子为根)合并时 cnt[fx]=sum[fy].以fx为根的节点u,现在以fy为根 在find时 都会先经过f原创 2018-01-21 12:15:08 · 205 阅读 · 0 评论 -
51nod 40 斜率小于0的连线数量 树状数组
题意:二维平面上n个点,问任意选两个点,其斜率小于0有多少种方案?n按照X坐标排序 离散化后,对于(a[i],b[i])找到前面有多少个b[j]>b[i]的点b[j]>b[i] 则前面有i-1个点 减去b[j]然后WA... 没有考虑横坐标相同的情况 比如 (2,9),(2,4) 这一对不应该被统计.令cur为当前更新到的下标 若b[cur]!=b[i] 则更新原创 2018-01-03 13:15:38 · 212 阅读 · 0 评论 -
CF 846 D. Monitor 滑动窗口,k*k子矩阵最大值
题意:n*m的矩阵,初始全部为白色,Q次操作,第i次操作发生在时间ti,(xi,yi)变为黑色.问第一次出现k*k黑色子矩阵的时间? n,m二分时间 每次O(n^4)判断. TLE.. (后面发现正解是二分,然后令此时黑色为1,白色为0,用二维前缀和判断是否有k*k的子矩形即可)a[x][y] 为(x,y)变为黑色的时间,设f[x][y]为以(x,y)为左上角,边长为k的子矩形原创 2017-12-07 21:54:50 · 503 阅读 · 0 评论 -
CF 899E Segments Removal 链表+优先队列
题意:长度为n的序列a,操作:每次移除序列中,元素都相等并且长度最长的一段区间.(若有多个 移除最左边一个).n相同的合并成一个二元组(xi,ci) xi为数字,ci为xi的出现次数. .整个二元组序列用链表串起来.每次删除链表中c[i]最大的位置, n次,每次查询链表中最大值并且要跳的最大值所在位置 O(n^2) TLE...将链表所有节点压入优先队列中,对于合并时被删原创 2017-12-23 13:21:27 · 315 阅读 · 0 评论 -
Nowcoder 7.E 珂朵莉的数列 逆序数,BIT
题意:给出长度为n的序列a,求序列a所有区间的逆序数之和?逆序数(ia[j] 则(i,j)为一个逆序数对). nia[j] (i,j) 这一对 出现了 i*(n-j+1)次.算贡献一对对算是也有n^2对 那么从后往前枚举左端点i 用BIT统计[i+1,n]比a[i]小的权值即可 a[i]>a[j] 则累加上n-j+1.答案爆ll,这里用了__int128#include原创 2017-12-02 08:52:12 · 281 阅读 · 0 评论 -
3.C位数差 离散化+树状数组
题意:给一个数组{a},定义 h(a,b)为在十进制下 a + b 与 a 的位数差,0的位数为1.n枚举a[j]的贡献: 算位数差为x时 a[i]有num个 ans+=num*x O(n*10).先计算和a[j]位数差为x时,所选a[i]的范围为[le,rg] 如何计算快速这段范围内有多少个a[i]?事先将数组排序后 二分序列中第一个>=le 和最后一个求出le,r原创 2017-11-12 11:39:16 · 330 阅读 · 0 评论 -
HDU 5269 ZYB loves Xor I 贡献+Trie
HDU 5269题意:给出序列a,求累加和:lowbit(a[i] xor a[j]) [i=1..n,j=1..n] n,a[i]lowbit(x)=1010110 异或结果为100.枚举a[i]二进制中起作用的1,则与a[i]异或的x,要满足a[i]和x的后缀pos(第pos位相反)是相同.用map记录后缀出现次数,O(30*n*logn) TLE.每个a[i]原创 2017-10-17 09:20:21 · 298 阅读 · 1 评论 -
HDU 5200 Trees 离线+链表维护.
HDU 5200题意:给出长度为n的序列a,Q个独立的操作:将序列中小于等于q[i]的数都删除(可以看作-1).当序列中两个数x,y之间无-1存在 则x,y是属于同一组. 问每次操作后序列被分为多少组? n,Q首先离线处理 按q[i]从小到到处理 设置另外一个排好序的序列b(二元组 记录val和pos).然后用链表把序列a给串起来.每次询问从序列b中取出位置pos进行删原创 2017-10-13 21:44:03 · 226 阅读 · 0 评论 -
HDU 5172 GTY's gay friends 线段树(排列,区间不同的数)
HDU 5172题意:给出长度为n的序列a,m次询问[L,R],问a[L]..a[R]是不是[1..R-L+1]的某个排列?.n,mm=R-L+1,若[L,R]的区间和为sum=m*(1+m)/2 并且[L,R]每个数都不相同 则说明[L,R]为1..m的一个排列.因为[L,R]每个数都不同 设最小为mn 则要想和为sum 则mn=1 并且排序后每个数都相差1.没有修改原创 2017-10-10 14:03:28 · 242 阅读 · 0 评论