摘要:
原题链接 考察:树状数组 思路: 操作1: 将序列的第k个数改为a 很明显的树状数组单点修改 操作2:在这个序列上,每次选出c个正数,看是否能-s次 这个操作与区间大小无关,也就是所有操作都是在整个序列上进行的.我们需要求出正数的个数,并且求出是否每次能选出c个-1. 每个操作都是a>=0,所以直接 阅读全文
摘要:
原题链接 考察:树状数组 思路: 本蒟蒻是完全想不到怎么写....参考大佬题解. 求种类数,可以处理的方法一个是针对询问实时加入数.但是这样一定会TLE,然后不好求重复的数字数. 参考大佬的题解,正解做法是i从1~n实时加入数,到询问的右端点求ans.这里与求逆序对的方法不同的是tr[i]表示下标为 阅读全文
摘要:
原题链接 考察:树状数组+离散化 思路: 很明显先离散化能力值.然后建边开始dfs树. 比较难想的是如何求每个点比它能力高的子结点数量~~(对本蒟蒻而言)~~ 首先确定搜索顺序.先遍历子结点,然后再单点加入自己的权值.深度深的子节点可能会被深度浅的父节点用到更新,因此不能删除树状数组在子节点的存储的 阅读全文
摘要:
原题链接 考察:树状数组+hash 本题的总结: 如果b可以交换任意元素到a,那么最少交换次数 = 环长度-1 如果b需要交换相邻的到a,那么最少交换次数 = 逆序对数目. 思路: 这道题如果贪心把每个数列的数字尽可能换成一样的是错误的.例二就是HACK数据.既然这样我们就考虑怎么转化答案式子来求最 阅读全文
摘要:
原题链接 考察:树状数组+二分 完全没想到,fw本f 思路: 这道题实际有点像逆康拓展开.对于某个位置i,在它前面的数有a[i]个.第一头牛是无法确定身高的,但是如果我们从后往前考虑就可以用排除法确定身高. 对于最后一头牛,比它矮的有a[n]个,说明它是1~n中,第a[i]+1个数.我们考虑第n-1 阅读全文
摘要:
原题链接 考察:树状数组+差分 上一道题的加强版,但还是结合差分数组 思路: 操作一:"C a b c"表示给[a, b]区间中的值全部增加c (-10000 ≤ c ≤ 10000)。 这里还是得用到差分,设b数组为原数组的差分数组,那么此操作就转化为单点修改 操作二:"Q a b" 询问[a, 阅读全文
摘要:
原题链接 考察:树状数组 确实简单....就是差分+树状数组即可.本蒟蒻还以为又有什么神乎其神的优化..... 思路: 我们先看第一个指令:第一类指令形如 C l r d,表示把数列中第 l∼r 个数都加 d。 l~r区间内+d .单看这个操作容易想到差分. 即 修改b[l]与b[r+1] 再看第二 阅读全文
摘要:
原题链接 考察:并查集 并查集维护序列的连通性 Y总在课上提过的题目,本蒟蒻果然不会 思路: 本质是快速染色某个区间.并查集可以帮助我们快速找到第一个未染色的点. 设p[i]为以i为起点第一个需要还未涂色的点(包括i) .通过findf(i)可以帮助我们找到第一个未染色的点.我们在for循环染色[l 阅读全文
摘要:
原题链接 考察:枚举 思路: 枚举四个边角的情况就行..... 疯狂WA到我麻木....看了题解发现是和A一样的解法.... 1 #include <iostream> 2 using namespace std; 3 int n,op[4]; 4 bool check(int s) 5 { 6 i 阅读全文
摘要:
原题链接 考察:并查集+离线 和这题有点像的题 HDU 3938 (本蒟蒻甚至写过) 思路: 乍一看似乎是LCA,但是询问两点最短距离必定TLE.我们可以发现两点之间的最短边首先是原题给定一条边,然后再对该边进行延伸.假定当前给定值是k,我们枚举边,将边两端进行合并,这样就是符合条件的结点个数.当k 阅读全文