HZOJ Weed】的更多相关文章

作者的题解: 如果一段操作被执行,会对整个栈有什么影响呢? 把栈弹出若干个数后再插入若干个数. 线段树: 每个点纪录三个值:执行完这段操作后会删多少个,再插多少个,插的和一共是多少. 合并值时再用一个函数查找左孩子被从右删除若干个后剩下的插入总和是多少. 建树复杂度O( N log N ), 单次查询复杂度O( log ^ 2 N), 总复杂度O( N log N + Q log ^2 N ). 树袋熊学长的题解: • 实际上,每个加数和删除的操作可以看作是入栈和弹栈操作,之后可以用线段树维护多…
Weed Time Limit: 20 Sec  Memory Limit: 512 MB Description 从前有个栈,一开始是空的. 你写下了 m 个操作,每个操作形如 k v : 若 k = 0,代表往栈顶加入一个数 v 若 k = 1,则代表从栈顶弹出 v 个数,如果栈中的元素少于 v 个,则全部弹出. 接着你又进行了 q 次修改,每次你会选择一个操作,并且修改它的两个参数. 在每次修改后,你都要求出如果依次执行这些操作,最后栈中剩下的元素之和. Input 第一行两个正整数 m,…
线段树是一种作用于静态区间上的数据结构,可以高效查询连续区间和单点,类似于一种静态的分治.他最迷人的地方在于“lazy标记”,对于lazy标记一般随我们从父区间进入子区间而下传,最终给到叶子节点,但还有一种做法就是对于作用域一整个区间的标记,就将其放置在此区间节点,查询时再结算其贡献,但无论怎样我们都要保证我们查询到的区间信息的真实性完整性,这就意味着我们接触一个区间若要了解到他的全部有用信息,并不用进入其下层区间(以上两种标记方式往往再结合出现时有巧妙的用处).于是我们必须高效地合并子区间的信…
T1 Blue 贪心,每次跳得时候跳能跳到的最远的地方,跳过的就把他设为0,每次二分找到位置,一直跳就行,如果能跳到的位置就是当前位置或比当前位置还小(数组里现在呆着的这一块石头,二分得到的就是当前位置,-1就比当前位置小了.但由于0的影响,while回退很慢,所以改用支持earse操作的set,可以水过他(这是T40和AC的区别!!!) #include<iostream> #include<cstdio> #include<cstring> #include<…
题目描述 \(duyege\) 的电脑上面已经长草了,经过辨认上面有金坷垃的痕迹. 为了查出真相,\(duyege\) 准备修好电脑之后再进行一次金坷垃的模拟实验. 电脑上面有若干层金坷垃,每次只能在上面撒上一层高度为 \(v_i\)的金坷垃 或者除掉最新\(v_i\) 层(不是量)撒的金坷垃.如果上面只留有不足\(v_i\) 层金坷垃,那么就相当于电脑上面没有金坷垃了. \(duyege\) 非常严谨,一开始先给你 \(m\) 个上述操作要你依次完成. 然后又对实验步骤进行了\(q\)次更改,…
话说这次考试 Drink 非常棒的一道卡常练习题,适合练习卡常 真的很棒 前置卡常知识 1.char要比int快 char是最快的 输出putchar,输入getchar 在这个题快了7000豪 2.read 快读非常棒,让你变得更快,fread更棒,fread会爆炸,考试时不要用fread 3.循环展开 循环展开非常棒,虽然看上去没什么用,然而循环展开会让你的程序快很多,循环展开往往是使你从T90到A的关键 4.inline inline没什么用 大多数时候都没有什么用,一般时间不会发生什么变…
ABC203F - Weed 题意转述 S t e v e \rm Steve Steve 和 A l e x \rm Alex Alex 正在下界( N e t h e r l e n d \rm Netherlend Netherlend)玩音符盒( N o t e b l o c k \rm Note~block Note block). S t e v e \rm Steve Steve 和 A l e x \rm Alex Alex 按下了按钮,听着各色音符被发光的红石线激活,感到无比…
题意 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公 数. 思路: 与先前的那个相比,这次a,c并不一定为一.所以先用的莫比乌斯+容斥定理但是TL 然后发现可以进一步有优化 可以发现8/3 和  8/4都等于2.所以我们可以分段计算,用sum记录mu的和,每次求出a/i的最大位置I,在i至l这段数中,a/i的值都是相同的,便可以每次循环计算出一段数的值,而且当数值越大时,重复越多. #include…
两个子任务真的是坑……考试的时候想到了60分的算法,然而只拿到了20分(各种沙雕错,没救了……). 算法1: 对于测试点1,直接n遍dfs即可求出答案,复杂度O(n^2),然而还是有好多同学跑LCA/最短路…… 期望得分10; 算法2(搬运题解,因为这个我没有想到……): t=1的数据最直接的想法是枚举所有可能的a[]数组判断是否可行.第2个测试点n<=5,1<=a[i]<=20.注意20^5=3200000,直接暴力搜索a[i]的取值是可以承受的,可以通过第2个测试点,期望得分10分,…
观察复杂度,是log级别以下回答询问的. O(1)?逗我kx呢? 自然而然地想到线段树. 学长讲的原题啊考场上还不会打. 线段树上的每个节点都表示一个操作区间. 线段树上维护的权值有3个:这个子区间一共“净”加了多少层cnt,多少量num,以及它需要除掉前面的多少层del. 因为对于每一个子区间,它只可能有几种情况: 新累加了几层,或者这个子区间不够删了删前面的几层,或先删掉前面的几层再加上新的几层. 那么每个叶节点就不用说啦,关键就在于两个区间合并. 1,如果右区间要删左区间而且还能把它删干净…