1.20 可爱总结

CF270F

*2600
感觉不太难的题啊,竟然2600,可能是因为古早 \(cf\) 的缘故吧。
考虑对每个字符记录哪些位置有它,开 \(26\) 个线段树即可~
然后对于 \([l,r]\) 就贪心的先放小的就行啦,可以发现只需要支持一个区间覆盖,然后就做完啦~

CF242E

*2000
拆位一下,然后对每一位都维护一棵线段树即可~

CF19D

*2800
首先无脑对 \(x\) 离散化一波,然后对于每一个 \(x\) 维护一下所有 \(y\),用 \(set\) 即可。
看看第三个操作,分两步:
1.找到最左边的有 \(y>query_y\)\(x\)
2.找到满足 \(y>query_y\) 的最小的 \((x,y)\)
第一个就是二分一下,看一下区间 \(max\),对每一个 \(x\) 开一下线段树即可。
第二个就对于这个 \(x\) 二分一下就行。
总结一下:
前两个操作就是对 \(set\) 操作一波,然后对线段树更新一波,都不太难。
最后一个就按上面两步做一下即可。

P2633 Count on a tree

难度:purple
要强制在线是吧,那其他的离线做法比如挂 \(query\) 标记啥的就都做不了了。
首先对 \(value\) 离散化。
看到第 \(k\) 小,可以想到二分,要求两点之间 \(\leq v\) 的个数要求在线,那么就考虑主席树,对于一个点就继承它父亲的即可,然后查询的时候就类似树上差分的做一下,就求一下 \(lca\),然后就 \(query(u)+query(v)-query(lca)-query(father_{lca})\) 这个 \(query\) 就在主席树上走一走,这样就差不多了,如果想去掉一个 \(log\) 就直接在主席树上二分一波即可。

posted @ 2025-01-20 18:06  v1ne0qrs  阅读(16)  评论(0)    收藏  举报