【BZOJ4385】[POI2015]Wilcze doły【单调队列】【前缀和】【Two Pointers】
来源:互联网 发布:python 经典书籍 知乎 编辑:程序博客网 时间:2024/06/04 18:44
【题目链接】
题解:
如果区间[j, i]固定,那么一定是将权值最大的一段变为0。
用单调队列维护一段区间内权值最大的子段下标(这里记录右端点下标,设为x),枚举右端点i,用尺取法计算出j。
一段区间[j, i]合法的条件是sum[i] - sum[j - 1] - (sum[x] - sum[x - d]) <= p。
复杂度:
时间复杂度:因为每个点最多遍历2次,复杂度为O(n)。
空间复杂度:O(n)
RE:
更新j的时候忘写h <= t了。如果写对拍的话应该可以拍出来。
GET:
如果d = 0,那么就是最裸的尺取法。
从尺取法出发,想了以下几种方法,但都可以证明是错的:
1 先找最长区间,满足区间和不大于p,然后将权值最大的一段变为0,再扩展。
反例:n = 9,p = 3,d = 1,10 1 1 1 10 1 2 1 1,答案应该为4。
2 找到权值最大的长度为d的区间,变为0,然后再从这里开始扩展。
反例:n = 8,p = 19,d = 2,10 11 12 10 1 1 1 1,答案应该为7。
所以不能静态维护了,考虑加入一个数,然后就想到了标解,但是不知道如何维护一段区间内固定长度权值最大的子段值。
应该用单调队列+前缀和。
又被单调队列+前缀和卡住了,看来得总结一下。
/* Telekinetic Forest Guard */#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;const int maxn = 2000005;int n, d;LL p, sum[maxn];int q[maxn];template <class numtype>inline void read(numtype &x) {bool f = 0; x = 0; char ch = getchar();for(; ch < '0' || ch > '9'; ch = getchar()) f = ch == '-' ? 1 : 0;for(; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';if(f) x = -x;}int main() {read(n); read(p); read(d);for(int i = 1; i <= n; i++) read(sum[i]), sum[i] += sum[i - 1];int h = 1, t = 0, ans = 0;for(int i = d, j = 1; i <= n; i++) {for(; h <= t && sum[i] - sum[i - d] > sum[q[t]] - sum[q[t] - d]; t--);q[++t] = i;for(; h <= t && sum[i] - sum[j - 1] - (sum[q[h]] - sum[q[h] - d]) > p; j++)if(q[h] - d <= j) h++;ans = max(ans, i - j + 1);}printf("%d\n", ans);return 0;}
0 0
- 【BZOJ4385】[POI2015]Wilcze doły【单调队列】【前缀和】【Two Pointers】
- bzoj4385 Wilcze doły 单调队列
- BZOJ4385: [POI2015]Wilcze doły
- BZOJ4385: [POI2015]Wilcze doły
- [bzoj4385/POI2015]Wilcze doły
- BZOJ4385[POI2015] Wilcze doły
- BZOJ4385 POI2015 Wilcze doły
- 【bzoj4385】 [POI2015]Wilcze doły
- bzoj4385 [POI2015]Wilcze doły
- BZOJ4385: [POI2015]Wilcze doły
- bzoj4385 [POI2015]Wilcze doły
- 4385: [POI2015]Wilcze doły|单调队列
- 4385: [POI2015]Wilcze doły (单调队列)
- BZOJ 4385: [POI2015]Wilcze doły 单调队列
- 【BZOJ 4385】[POI2015]Wilcze doły 单调队列
- bzoj 4385: [POI2015]Wilcze doły 单调队列
- 4385: [POI2015]Wilcze doły
- BZOJ 4385: [POI2015]Wilcze doły
- ENVI图像处理(一)Landsat-8OLI叶绿素反演
- Github 之 SSH key的创建于配置(Windows)
- ORB-SLAM2:基于可识别特征的自主导航与地图构建
- 测试用例的设计方法(全)
- OI算法汇总[大纲]
- 【BZOJ4385】[POI2015]Wilcze doły【单调队列】【前缀和】【Two Pointers】
- android---极光推送初步了解
- Critical Links(连通图 桥)
- IOS中sqlite数据库利用bold类型存储与读取字典
- leetcode---SortList
- 多传感器数据融合算法---9轴惯性传感器
- 有关QWidget的关闭close()
- Zigbee之旅(三):几个重要的CC2430基础实验——外部中断
- O'Reilly-现代php译文(1)