
2018多校训练
奔跑的蜗new
这个作者很懒,什么都没留下…
展开
-
hdu6301(贪心+set)
求一个长度为n的数列, 给出m个区间,这m个区间各自区间内的数不同 当时比赛打完3题后稍微看了一下这题想了几分钟不是很容易就丢了。。比完想补这题想了一个垃圾做法复杂度有点高不敢写,于是面向标程编程了。。。大佬的做法真的清奇唉慢慢学吧 预处理一下用一个数组保存以这个点为起点的查询的最大的R的位置last[l] = max(last[l],r) (这里相当于去掉了完全包含在大区间里的小...原创 2018-07-24 00:39:24 · 1036 阅读 · 1 评论 -
hdu6315(线段树)
给出一个数组b[i],一个初始为0得a[i],两个操作add l r把a[l] - a[r]都加1,query l r求a[i]/b[i]的和 用一个数组维护(a[i] + ti ) / b[i]中的ti, ti初始等于b[i]每add一次ti就减一,当ti为0得时候维护a[i]/b[i]的地方+1,并把ti重置为b[i] 下推lazy地时候写错了写成了tree[rt<<...原创 2018-07-26 12:28:27 · 502 阅读 · 0 评论 -
hdu6319(单调队列)
给出一个数列长度为n 求从左往右的每个长度为m的子区间的最大值maxnum,以及每个子区间从左往右数最大值变化的次数count、 maxnum好求,单调队列维护一下就行了, count想了很久都有bug,看了题解是从又往左进行单调队列这样单调队列里就会依次保存这个区间内的最大数,次大数,第三大数。。。,队列的size就是count值#include <cstdio>#i...原创 2018-08-06 20:32:43 · 423 阅读 · 0 评论 -
hdu6299(贪心)
很好的一题贪心,自己死活想不出来怎么贪,一直去想几种特殊情况,比如(()()) , (()()())之类的,绕进死胡同了,这题关键是把已经匹配好的括号去掉,只考虑剩余部分怎么拼接才能最大化参考博客看完这个博客思路后自己实现的时候除了点小问题,就是排序的时候出现死循环了,查了百度后可能原因是有相同的元素返回true导致不断排序,解决办法是让相同元素返回false或者使用stable_sort...原创 2018-08-16 13:05:14 · 616 阅读 · 0 评论 -
hdu6395(快速幂)
分段的时候边界用这个公式计算:ll j = P/i==0?n:min(n, P/(P/i));#include <cstdio>#include <cmath>#include <cassert>#include <cstring>#include <algorithm>using namespace std;ty...原创 2018-08-16 19:18:59 · 312 阅读 · 0 评论 -
poj6313(构造)
构造一个矩阵,任意子矩阵中没有四个点都为1先看构造的公式:for (int i = 0; i < p; i++) for (int j = 0; j < p; j++) for (int k = 0; k < p; k++) mat[i*p+j][k*p+(j*k+i)%p] = 1;再贴上图:...原创 2018-08-17 13:24:50 · 155 阅读 · 0 评论