摘要: 在一个区间上进行操作,一种操作是某个小区间都加上c,另一个查找这个区间内大于c*c的数 我们可以另外开一个数组在保存a中的每个分块内的相对值,然后每次对a加值,并把a的值赋给b,不同的是b内的各个分块需要进行排序,然后通过二分找区间的整块内的小于c*c的值,如果是在区间的边上,不是一个整块,那就直接 阅读全文
posted @ 2018-07-25 11:32 Jiaaaaaaaqi 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 分块思想,先把原来的序列分成根号n快,然后对于更新的部分,先操作这个序列边上的部分,然后再中间部分整块操作,这样复杂度就是O(根号N) #include<map> #include<set> #include<ctime> #include<cmath> #include<stack> #inclu 阅读全文
posted @ 2018-07-25 09:51 Jiaaaaaaaqi 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 扫描线求周长,可以看成两条线,一条扫x轴,一条扫y轴,然后这两天线扫过去的 周长加起来,就是周长了 #include<map> #include<set> #include<ctime> #include<cmath> #include<stack> #include<queue> #include 阅读全文
posted @ 2018-07-25 01:20 Jiaaaaaaaqi 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 按顺时针给出n个小孩,n个小孩每个人都有一个纸,然后每个人都有一个val,这个val等于自己的因子数,如果这个val是正的,那就顺时针的第val个孩子出去,如果是负的话,就逆时针的第val个孩子出去,所以可以用线段树维护一个区间内的孩子数,然后找到下一个孩子是这些人里的第k个人,用线段树找到剩下的第 阅读全文
posted @ 2018-07-25 00:44 Jiaaaaaaaqi 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 给出一个n长度的区间,然后有一些小区间只能被喷水一次,其他区间可以喷水多次,然后问你要把这个区间覆盖起来最小需要多少喷头,喷头的半径是[a, b]。 对于每个只能覆盖一次的区间,我们可以把他中间的部分标记起来,每次只在他的两端放置喷头,中间的点不能放置多余的喷头,然后找状态方程 dp[i] = 到第 阅读全文
posted @ 2018-07-25 00:27 Jiaaaaaaaqi 阅读(186) 评论(0) 推荐(0) 编辑