上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 32 下一页
摘要: 题目链接 #解题思路 以任意一个点为根,求出它到根的异或值,那么两个点之间异或值就是两者到根的异或值的异或值(因为重复的数异或值等于0),然后就变成了求n个数中两个数最大的异或值。 #代码 const int maxn = 1e6+10; const int maxm = 3e6+10; vecto 阅读全文
posted @ 2020-07-19 17:01 shuitiangong 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 题目链接 #解题思路 如果想要两个异或的值最多,最好就是两个数从二进制的高位到地位,尽可能的满足一个是1一个是0。把每个数都转换成31位二进制串的形式,然后存到trie树中。然后一个一个的枚举每一个数,在trie树中找尽可能可以异或出最大值的数。 #代码 const int maxn = 1e5+1 阅读全文
posted @ 2020-07-19 16:24 shuitiangong 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 题目链接 #解题思路 马拉车当然是求最长回文既简单又快速的方法,不过这里因为要联系hash就没用马拉车了。设回文串的中心为a,b(奇回文a=b)先正着hash一遍,再倒着hash一遍,就能得到[a+len,a]和颠倒后的[b,b+len]两个子串哈希值,对比它们的哈希值就能判断两个子串是否相等,至于 阅读全文
posted @ 2020-07-18 22:43 shuitiangong 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 题目链接 #解题思路 本题的数据范围显然不能把所有数组一个一个对比,可以建立一个哈希表,不同的h[x]代表不同的哈希值,哈希值冲突的数组就存在同一个h[x]开头的链表里,然后根据哈希值来对比对应的字符串,减少重复比较。 #代码 const int maxn = 1e5+10; int a[10], 阅读全文
posted @ 2020-07-18 18:12 shuitiangong 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 题目链接 #解题思路 如果将所有数字按从大到小排序,并且从编号最大的数开始找的话,那么他的左右两边的数肯定就是离他最近的数,计算之后把编号最大的数删掉,那么编号次大的数相当于之前编号最大的数...所以利用链表来做到O(1)删除,就能在O(nlogn)的时间内解题。 #代码 const int max 阅读全文
posted @ 2020-07-18 15:19 shuitiangong 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 题目链接 #解题思路 枚举右端点,利用前缀和计算$max(pre[r] - min(pre[l])), l \epsilon [r-m,r-1]$。所以关键就是如何在范围内找到$min(pre[l])$,对于范围内的前缀和来说,如果靠右的前缀和比靠左的小,那就肯定用不到他,而如果比靠左的大,如果左边 阅读全文
posted @ 2020-07-18 10:31 shuitiangong 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 题目链接 #解题思路 这个题显然是用队列做的,但是单纯的一维队列无法解决这个问题,因为要涉及到插队问题,所以我们要用一个二维的队列来存储完成入队和出队操作,但是这样的话,我们无法得知每个队伍的先后顺序,所以我们还需要再用一个一维队列来存储小队的顺序。 #代码 const int maxn = 1e3 阅读全文
posted @ 2020-07-17 17:50 shuitiangong 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 题目链接 #解题思路 火车进栈一共有两种状态,一种是后面的火车车厢进栈,一种是前面的火车出栈。可以发现,如果后面的车厢进栈了,因为先进先出,而他的编号较大,那么他出栈的形成的序列的字典序就一定比先让栈中的火车出栈要大。 所以说如果要输出字典序最大的序列,应该优先让前面的火车出栈,然后再让后面的火车进 阅读全文
posted @ 2020-07-17 11:15 shuitiangong 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 题目链接 #解题思路 对顶栈的模板题。L和R的操作可以由对顶栈来实现,至于查询操作用一个前缀和数组和一个存最大值的数组来存就行了。 #代码 const int maxn = 1e6+10; stack<int> skl, skr; int pre[maxn], f[maxn] = {-114514} 阅读全文
posted @ 2020-07-16 21:56 shuitiangong 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 题目链接 #解题思路 对顶堆模板题,一个堆对应一半。 #代码 priority_queue<int, vector<int>, less<int> > l, clears1; priority_queue<int, vector<int>, greater<int> > r, clears2; ve 阅读全文
posted @ 2020-07-16 21:31 shuitiangong 阅读(141) 评论(0) 推荐(0) 编辑
上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 32 下一页