【BZOJ 4582】【Usaco2016 Open】Diamond Collector
2016-11-16 14:51
375 查看
http://www.lydsy.com/JudgeOnline/problem.php?id=4582
排好序后用两个指针直接\(O(n)\)扫,貌似这个东西学名"two pointers"?
排好序后用两个指针直接\(O(n)\)扫,貌似这个东西学名"two pointers"?
#include<cmath> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 50003; int pre , aft , a , n, k, cnt; int main() { scanf("%d %d", &n, &k); for (int i = 1; i <= n; ++i) scanf("%d", a + i); stable_sort(a + 1, a + n + 1); int tail = 1, head = n; for (int i = 1; i <= n; ++i) { while (tail <= n && a[tail] - a[i] <= k) ++tail; aft[i] = tail - i; } for (int i = n; i >= 1; --i) { while (head >= 1 && a[i] - a[head] <= k) --head; pre[i] = i - head; } for (int i = 2; i <= n; ++i) pre[i] = max(pre[i], pre[i - 1]); for (int i = n - 1; i >= 1; --i) aft[i] = max(aft[i], aft[i + 1]); int ans = 0; for (int i = 2; i <= n; ++i) ans = max(ans, pre[i - 1] + aft[i]); printf("%d\n", ans); return 0; }
相关文章推荐
- bzoj 4582: [Usaco2016 Open]Diamond Collector (单调队列+线段树)
- [BZOJ4582][Usaco2016 Open]Diamond Collector(二分+st表)
- bzoj 4582: [Usaco2016 Open]Diamond Collector
- 【BZOJ4582】【Usaco2016 open】Diamond Collector 贪心
- BZOJ 4582: [Usaco2016 Open]Diamond Collector
- BZOJ 4580: [Usaco2016 Open]248
- bzoj 4579: [Usaco2016 Open]Closing the Farm
- 【bzoj 4581】[Usaco2016 Open]Field Reduction(dfs)
- bzoj 4580: [Usaco2016 Open]248
- 【bzoj4579】[Usaco2016 Open]Closing the Farm 并查集
- bzoj 4580: [Usaco2016 Open]248 (dp)
- bzoj 4579: [Usaco2016 Open]Closing the Farm (并查集+离线)
- 【BZOJ4576】【BZOJ4580】【Usaco2016 Open】262144 贪心
- [BZOJ4581][Usaco2016 Open]Field Reduction(dfs)
- bzoj4579[Usaco2016 Open]Closing the Farm--by lethalboy
- BZOJ4580: [Usaco2016 Open]248
- 【BZOJ4580】[Usaco2016 Open]248【区间DP】【或 贪心】
- BZOJ4580: [Usaco2016 Open]248 dp
- [BZOJ4579][Usaco2016 Open]Closing the Farm(并查集)
- [DP || 贪心 链表] BZOJ 4576 [Usaco2016 Open]262144 & BZOJ 4580 [Usaco2016 Open]248