- 博客(9)
- 收藏
- 关注
原创 hdu5358(子数列对数和(尺取))
【1,1】这个区间,对应【1】【1,1】【1】三个子区间,和值分别为1,2,1, 对应的二进制位数分别是1,2,1, 对应的a,b分别为【1,1】,【1,2】,【2,2】【a,b】,它所对应的结果就是t*(a+b),最终结果就是把所有区间对应的t*(a+b)求总和。题目意思现在可以转化为, 不同子区间的和所对应的二进制的位数t在【1,34】, 对于每个子区间。分别算出这些区间左右端点的和再累加,最后再乘i,此位就处理结束,到下一位。最终结果res=1*(1+1)+2*(1+2)+1*(2+2)=12;
2024-12-11 20:57:28
702
原创 poj2566--Bound Found(前缀和&&尺取法)
l,r]区间和的计算是s[r]-s[l-1],因此最后输出的区间左端点应是left+1,这也是为什么当l==r时,r要加1的原因。核心(指针移动规则):如果当前维护的区间和值小于t,那么显然应当试图寻找一个和值更大一点的区间,因为前缀和序列单调增加,所以我们只需要把r指针往右移动,得到和值更大的区间。突破点:“区间和”,求的是区间和及左右边界,马上想到前缀和。cur_sum——当前区间和的绝对值,cur_dis——当前区间和的绝对值到t的距离,如果小于least_dis,则更新结果和区间端点。
2024-12-08 22:58:28
784
原创 poj3061-求序列中的一个最短连续区间(尺取法)
题目链接:AC代码如下:int a[N];cin >> t;i < n;for (;return 0;
2024-12-07 11:29:18
349
原创 找指定和的整数对(双指针)
int m;cin >> n;i < n;cin >> m;for (;s < f;) {s < f?return 0;input:928output:5 23。
2024-12-06 09:19:26
147
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人