2019.10.19日常总结

洛谷 P 1638 P1638 P1638

【题目链接】:http://www.luogu.org/problem/P1638
【题目描述】:
2019.10.19日常总结_第1张图片
【数据范围】:
在这里插入图片描述
【思路】: 经典的two-pointer双指针法(即尺取法
t w o − p o i n t e r 双 指 针 法 ( 尺 取 法 ) 祥 讲 two-pointer双指针法(尺取法)祥讲 twopointer
双指针就是有两个指针 a a a b b b。这个方法目的一般是为了统计这样 的二元组的一些信息(比如数量、极值等)
这样的二元组可能描述了一些其他东西,比如说一个闭合区间
如果分析题目性质可以发现,一个指针向一个方向动,另一个指 针也只会单向移动,也就是所谓的“单调性”,那就可以用这个方 法,移动指针的时间复杂度也是线性的

for(int l=r=1;l<=n;l++){
    while (r<=n&&check(l,r)) r++;//check(l,r)表示l,r满足条件
    r--;//此时,r-1是满足条件的,但r不满足条件
    处理一个合法区间[l,r]
}

回归本题,从小到大枚举这个区间的右端点 b b b,能够满足条件的最靠右的左端点 a a a单调不降(当然也可以枚举 a a a,求 b b b
记录一个数组表示当前区间中每幅画有多少个,再记录一个变量 表示能看到多少幅画。那么区间端点的移动只会带来一个元素的 加入和删除,这两个信息可以很好维护
2019.10.19日常总结_第2张图片
2019.10.19日常总结_第3张图片
2019.10.19日常总结_第4张图片

你可能感兴趣的:(原创)