3.4模拟赛总结

烦,白天犯困睡不醒,中午被人吵得睡不着,也不是不能理解,毕竟素质也只有那么点

欸呀,又挂了20pts,恼…

时间安排

7.30-8.30

认真看了三道题,感觉T1线段树优化,T2结论性,组数dp,T3数据结构?想了个T1的假做法

8.30-9.00

认真打瞌睡顺便思考怎么能让T1边真

9.00-9.40(不到)

感觉应该先把能写的东西写了,于是思索了一下T2,写了代码,开始打表

9.40-10.20(左右?)

写了T3的40

10.20-11.00(不到)

写了T1的暴力 顺便继续思索T1的正解

11.00-12.00

思索正解 顺便检查

题目分析

T1

思考一个假做法

考虑线段树上每个节点n个虚拟点,代表 i i i 号点要连向的点

在叶子处,例如存在一条边 x − > y x->y x>y那么在 x x x 的位置把值设成 y y y

然后非叶子处,直接根节点 的 i i i 号点向左右子树的 i i i 号点连边

这样处理上限是 O ( n m ) O(nm) O(nm) 的,加上一些小优化之后到不了这个上限

然后考虑,对于一个询问 ,直接在线段树上区间连边,复杂度 O ( n q l o g m ) O(nqlogm) O(nqlogm)

貌似很对,但有一个小问题

tarjan的复杂度是 O ( n + m ) O(n+m) O(n+m)

所以就g了qwq

T2

什么,我只会打表

2 n ( n − 1 ) / 2 2^{n(n-1)/2} 2n(n1)/2枚举后,大力dfs跑不重复最长路

T3

(不知道为什么假了,我哭!)

考虑分开做,首先,区间异或=前缀异或后,选两个位置进行异或

那么我们可以先处理出来哪些区间是受关注的区间

接下来的问题就是对于询问区间 i i i , 使得对于查询区间 j j j l j < = l i , r i < = r j l_j<=l_i,r_i<=r_j lj<=li,ri<=rj,把这些区间i整体加上一个值,直接按左端点从大到小排序后,右端点从小到大排序,查询区间在询问区间之前

然后维护出来每个查询区间之后,考虑直接变成树状数组上差分修改,单点查询

我裂开了,加了负数之后变成负的,忘输出的时候+mo再%mo了 qwq

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值