摘要: 数据最大就2^31次方,通过计算这些数开方五次就变成1了,然后把继续开方也不会变了,所以对于每个块,前5次更新暴力,之后就可以直接跳过,查询就直接就可以了 #include<map> #include<set> #include<ctime> #include<cmath> #include<sta 阅读全文
posted @ 2018-07-26 19:33 Jiaaaaaaaqi 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 另外开一个数组维护每一个块内的总和。 给区间加值是,残余的块一个一个点更新,整个的块一次性更新 查询的时候也是,残余的块一个一个点加,整个的块一次性加 #include<map> #include<set> #include<ctime> #include<cmath> #include<stack 阅读全文
posted @ 2018-07-26 17:45 Jiaaaaaaaqi 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 区间加值还是正常的操作,查找前驱的时候用lower_bound查找,然后范围所在位置的值 #include<map> #include<set> #include<ctime> #include<cmath> #include<stack> #include<queue> #include<stri 阅读全文
posted @ 2018-07-26 16:55 Jiaaaaaaaqi 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 让ci = ai / bi, 求sum(ci)的值,因为每次 ai 都是加一的,那么我可以用一颗线段树来维护每个 i 位置的 ai 距离达到 bi 还需要的数的最小值,更新是每次都减一,如果我某一个区间的最小值等于 0, 这就说明我这时候的ai已经满足了ai/bi==1的情况,那么对应的ci的位置就 阅读全文
posted @ 2018-07-26 12:22 Jiaaaaaaaqi 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 在个给出的矩阵从,从左上角走到右下角,然后再从右下角走到左上角,两次不能经过想同的点,每个点都有一个价值,问最大的价值是多少。 可以把原来的问题化简成从左上角走两条路到右下角,然后把价值加起来,然是这时候我出发点和目标点的价值加了两次,而原本只计算一次,所以最后要减掉,然后建图 1.超源到(1,1) 阅读全文
posted @ 2018-07-26 10:05 Jiaaaaaaaqi 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 在一个区间上进行操作,一种操作是某个小区间都加上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) 编辑