首页 > TAG信息列表 > NOI2004
P1486 [NOI2004] 郁闷的出纳员【Splay】
传送门 第一行有两个整数 n n n 和 min \min min。P4274 [NOI2004]小H的小屋 dp 贪心
LINK:小H的小屋 尽管有论文 但是 其证明非常的不严谨 结尾甚至还是大胆猜测等字样... 先说贪心:容易发现m|n的时候此时均分两个地方就是最优的。 关于这个证明显然m在均分的时候的分点一定是n的子集 考虑不为均分的时候答案一块增多一个增少 但是增多的幅度显然更大 所以的证。 然后题解 NOI2004【郁闷的出纳员】
\[ Preface \] 之前用 treap 打,交了四遍才过。 自学了 fhq treap 后,才意识到是一道 fhq treap 板子题,直接码上,一遍就过。 本题解提供的是 fhq treap 做法(感谢 fhq 神犇),不太了解 fhq treap 的同学可以去了解一下 fhq treap ,挺好理解的。(至少要了解两种 split 和 merge 操作) \[ Desc[NOI2004]郁闷的出纳员
FHQ-Treap水过... 这题确实可以通过增量的方法做...(然而我WA了) 后来一气之下写了一个大常数的直接每次操作Push_Down一下维护节点val和lazy_tag Insert操作就是裸的操作 对于A S 操作我们就用打lazy_tag的方法维护一下节点权值,然后能下传的地方就下传,之后把小于min的点删掉(直P1486 [NOI2004]郁闷的出纳员
题目链接 这道题需要动态插入,删除,求排名,看到这就想到了平衡树。由于本人只会splay,所以就用splay来做这道题,这道题插入和删除都是模板,但是题中还有一个比价坑的地方就是工资的调整。但我做不到在平衡树上修改点权。如果每一个都去插入和删除的复杂度显然非常高。看了题解发现,可以维NOI2004郁闷的出纳员
传送门 题目看起来玄乎,但其实只需要一点点小 trick 就可以了. 我们可以用一个全局的 delta 来维护工资的调整记录 对于每一个新加入的员工,先判断是否低于最低工资下限,如果是,直接踢出,不做任何操作,否则,将其插入 Treap 中,不过这时为了不对以后的查询产生影响,我们要插入的值时[NOI2004]郁闷的出纳员
平衡树,裸题。 我们维护一下加法标记,然后剩下的就乱搞搞就好了。 这里使用了\(splay\)实现。 My Code: #include <bits/stdc++.h> #define il inline const int maxn = 1e5 + 10; const int inf = 0x3f3f3f3f; using namespace std; int n,m,i,j,k,root,add,tot,q,x,mn,padd,pnow;