题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2213 https://loj.ac/problem/2161 题解 做一道简单题来放松一下. 不过这道题细节挺多的,可以作为一道练细节的好题. 直接钦定出现最多的字母和出现最少的字母,这样把原序列转化成 \(\pm1\) 的序列做最大字段和就可以了. 我们可以在扫这个序列的时候用一个数组 \(s[i][j]\) 表示以 \(i\) 为出现最少的,\(j\) 为出现最多的的最大子段和,直接更新…
题目链接 [BZOJ] [洛谷] [LOJ] 题解 由于是前序遍历,那么讨论一棵树上的逆序对的情况. 两个节点都在左子树上 两个节点都在右子树上 两个节点分别在不同的子树上. 前两种情况其实也可以归结于第三种情况. 原因 因为两个节点不可能占据一个位置. 根据容斥原理,为了保证答案的正确性,我们递归求解不能计算两遍相同的答案. 回到正题 所以我们只需要讨论跨越两个子树的情况. 很显然,左子树中的所有点的\(dfs\)序都比右子树的子树中的小. 那么如果要交换,就是相反一下. 比较容易可以想到对于…
LOJ#3032. 「JOISC 2019 Day1」馕 处理出每个人把馕切成N段,每一段快乐度相同,我们选择第一个排在最前的人分给他的第一段,然后再在未选取的的人中选一个第二个排在最前的切一下,并把第二段给他,这样下去一定有解 代码细节具体在比较大小的时候成绩可能需要int128 然后在给每个人分段的时候,把一个馕的长度当成\(Nq\),把要得到的每段长度当成\(sum\)(所有段快乐度的总和)就可以1去分了 #include <bits/stdc++.h> #define fi first…
LOJ#3031. 「JOISC 2019 Day1」聚会 听说随机可过? 我想了很久想了一个不会被卡的做法,建出前\(u - 1\)个点的虚树,然后找第\(u\)个点的插入位置,就是每次找一条最长链,询问链的两个端点和u的虚树,如果u在链上那么二分找出u的位置,如果u不在链上且和链相连的点不在链上,那么建出那个点然后连上u,否则删除整条链,保留与u相连的那个点,继续这个操作 二分的代价应该最多是11,每次差不多删掉两个儿子是18/2 = 9 然而这个上限肯定跑不到,最后实测操作次数最多的数据点…
LOJ#3030. 「JOISC 2019 Day1」考试 看起来求一个奇怪图形(两条和坐标轴平行的线被切掉了一个角)内包括的点个数 too naive! 首先熟练的转化求不被这个图形包含的个数 -- 也不好求 我们把c转化成max(c,a + b) 就会发现这条斜线把不合法的刚好分成了三个部分,也就是第一门小于a的,总分大于c的,和第二门小于b的总分大于c的,和总分小于c的 你可以发现前两个部分是不相交的,于是开个树状数组把询问按c排序做一遍就好了,然后点集按s + t排序,小于c的就从所在的…
「JOISC 2014 Day1」巴士走读 将询问离线下来. 从终点出发到起点. 由于在每个点(除了终点)的时间被过来的边固定,因此如果一个点不被新的边更新,是不会发生变化的. 因此可以按照时间顺序,依次提高终点的时间,然后跑dijkstra(记得把访问标记回滚清空掉). 每条边被跑过了就不再跑了.可以用set,也可以vector(排序,记当前在第几条边) #include <bits/stdc++.h> #define rep(q, a, b) for (int q = a, q##_end…
「BalkanOI 2018 Day1」Election 记C为1,T为-1,\(sum[i]\)为\(i\)点的前缀和. 对于询问\([l,r]\),分两步计算答案. 要求所有点的\(sum[i]-sum[l-1] \geq 0\),那么就把一些点拔高,需要删去的点数为\(max(sum[l-1]-sum[i])\),最终得到\(sum^{'}[i]\),记需要删去的点个数为\(ans_1\). 要求所有点\(sum^{'}[r]-sum^{'}[i] \geq 0\),那么就把一些点降低,需…
「BalkanOI 2018 Day1」Minmaxtree 每个点都有一个最大和最小权值的限制. 然后每一个权值的限制都必须要取到. 每个点显然可以直接让他取到最大或最小权值. 可以想到每个点匹配一个权值. 不就是一个二分图吗... 每个点连向最大和最小权值,然后跑dinic,输出方案,当然本题匈牙利可以跑过. 接下来就是要求每个点的权值限制:可以用LCT直接链标记,也可以离线下来,排序后,依次加入,用一个并查集跳过已经访问过的点. #include<bits/stdc++.h> #defi…
「JOISC 2014 Day1」 历史研究 Solution 子任务2 暴力,用\(cnt\)记录每种权值出现次数. 子任务3 这不是一个尺取吗... 然后用multiset维护当前的区间,动态加,删点即可. 子任务4 目前可以支持在\(o(log(n) )\)的时间里动态加,删单点了. 容易想到莫队. 直接用multiset维护复杂度\(o(n \sqrt n log(n))\).(一脸不可过) 稍微优化一下 ​ 若使用cnt记录的话,是没法很好的删点的. ​ 对于目前要处理的块\([l,r…
题目描述 译自 BalticOI 2011 Day1 T3「Switch the Lamp On」有一种正方形的电路元件,在它的两组相对顶点中,有一组会用导线连接起来,另一组则不会.有 N×M 个这样的元件,你想将其排列成 N 行 M 列放在电路板上.电路板的左上角连接电源,右下角连接灯泡.试求:至少要旋转多少个正方形元件才能让电源与灯泡连通,若无解则输出 NO SOLUTION. Casper is designing an electronic circuit on a N×M rectan…