http://acm.hdu.edu.cn/showproblem.php?pid=5700 这是这次百度之星初赛2B的第五题.省赛回来看了一下,有这样一个思路:对于所有的区间排序,按左值排序. 然后枚举区间左值lt,计算区间右值rt最大是多少,并且满足与至少k个区间相交.关键是解决与k个区间相交这个关系.首先区间左值大于lt的是不考虑的,因为这样相交区间的左值就不是lt了.也就是考虑区间左值小于等于lt的区间中,与rt区间至少有k个相交的区间.也就是在前面的条件下,计算是否有至少k个区间右值大…
Problem Description Mario is world-famous plumber. His “burly” figure and amazing jumping ability reminded in our memory. Now the poor princess is in trouble again and Mario needs to save his lover. We regard the road to the boss’s castle as a line (…
题目是中文,所以不讲题意 做法顺序如下: 使用先跟遍历,把整棵树平铺到一维平面中 使用自己整的区间更新树状数组模板进行相关操作. http://www.cnblogs.com/rikka/p/7359185.html 放代码如下: #include<bits/stdc++.h> using namespace std; /* *常量MAXN用于设定树状数组的尺寸大小 */ ; class TreeLikeArray { public: /* *数组c1用来储存A[i]-A[i-1]: */ l…
题目链接:子段求和 题意:n个数字序列,m次询问,每次询问从第p个开始L长度序列的子段和为多少. 题解:线段树区间求和 | 树状数组区间求和 线段树: #include <cstdio> #define LC(a) ((a<<1)) #define RC(a) ((a<<1)+1) #define MID(a,b) ((a+b)>>1) using namespace std; typedef long long ll; ; ll ans=; struct…
点权树的模板题,另外发现树状数组也是可以区间更新的.. 注意在对链进行操作时方向不要搞错 线段树版本 #include<bits/stdc++.h> using namespace std; #define maxn 50005 #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 ]; int a[maxn],head[maxn],tot; int deep[maxn],fa[maxn],son[maxn],num[max…
题意: 给出一个长度为\(n\)的数列\(A_i\),定义\(f(k)\)为所有长度大于等于\(k\)的子区间中前\(k\)大数之和的和. 求\(\sum_{k=1}^{n}f(k) \; mod \; 10^9+7\). 分析: 从某个长度为\(k\)的子区间对答案的贡献来看: 它的长度大于等于\(k\),所以区间中每个都加到答案中一次. 它的长度还大于等于\(k-1\),区间中前\(k-1\)大的数加到答案中一次. -- 以此类推. 对于每个数\(A_i\):如果这个区间中有\(x\)个小于…
士兵杀敌(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军现在想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧. 注意,南将军可能会问很多次问题. 输入 只有一组测试数据 第一行是两个整数N,M,其中N表示士兵的个数(1<N<1000000),M表示南将军询问的次数(1<M<100000) 随后的一行是N个整数,ai表示第i号士兵杀敌数…
涉及区间操作的一些套路必须要会呀 区间加减为了偷懒能不写线段树so我选择树状数组!! 但是区间乘除,最大值我想了想还是用线段树分块吧. 树状数组: 这里用网上的一张图: 这里灰色数组是原本的数组(a[i])红色数组则是树状数组(c[i])这里直接给出结论: c[i]=a[i-2^k+range[1,2^k]] k是i的二进制位从低到高位连续0的个数 与a[i]有关的 c[i+2^(k+j)] 且 i+2^(j+k)<n 这样就很好实现单点更改,区间查询了. void lowbit(int x)…
题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1551 题意: 给出一段序列, 删除其中一段连续的子序列(或者不删), 使得剩下的序列的最长上升连续子序列最大. 题解: 1.对于要删除的的子序列而言,要么夹在答案序列中间,要么在外面(删与不删对答案都没影响).所以总体而言,答案序列被分成左右两半. 2.用SL[i]记录从左边起以a[i]为结尾的最长上升连续子序列的长度, SR记录从右边起以a[i]为开始的最长上升连续子序列的长度.…
题目链接:http://codeforces.com/contest/703/problem/D 给你n个数,m次查询,每次查询问你l到r之间出现偶数次的数字xor和是多少. 我们可以先预处理前缀和Xor[i],表示1~i的xor和.因为num^num=0,所以Xor[r] ^ Xor[l - 1]求的是l~r之间出现奇数次的数字xor和. 那怎么求偶数次的呢,那我们可以先求l到r之间不重复出现数字的xor(比如1 1 2 求的是1 ^ 2),然后再xor以上求出的Xor[r] ^ Xor[l…