zoukankan      html  css  js  c++  java
  • LuoGuP3594:[POI2015]WIL-Wilcze doły

    Pre

    尽管只是一道蓝题,还是有一点说的必要,强调推论的重要性。

    Solution

    可以证明答案不可能小于(d),而且去掉的区间长度不可能小于(d),也就是一定为(d)

    直接维护单调队列就可以了。

    Code

    #include<bits/stdc++.h>
    #define xx first
    #define yy second
    #define ll long long
    using namespace std;
    const ll N = 2000000 + 5;
    inline ll Max (ll m, ll n) {
    	return m > n ? m : n;
    }
    ll n, p, d;
    ll info[N], sum[N], q[N], head, tail, ans, l, r;
    inline void solve () {
    	tail = head = 1;
    	q[1] = d;
    	l = 1;
    	while (r < n) {
    		r++;
    		while (tail >= head && sum[q[tail]] - sum[q[tail] - d] < sum[r] - sum[r - d]) {
    			tail--;
    		}
    		q[++tail] = r;
    		bool flag = true;
    		while (flag) {
    			flag = false;
    			if (tail >= head && q[head] - d + 1 < l) {
    				head++;
    				flag = true;
    				continue;
    			}
    			if (sum[r] - sum[l - 1] - (sum[q[head]] - sum[q[head] - d]) > p) {
    				l++;
    				flag = true;
    				continue;
    			}
    		}
    		ans = Max (ans, r - l + 1);
    	}
    	printf ("%lld
    ", ans);
    }
    int main () {
    	scanf ("%lld%lld%lld", &n, &p, &d);
    	ans = d;
    	for (int i = 1; i <= n; ++i) {
    		scanf ("%lld", &info[i]);
    		sum[i] = sum[i - 1] + info[i];
    	}
    	solve ();
    	return 0;
    }
    

    Conclusion

    这个结论有点不可思议,但是一旦利用好了,就可以(A)掉这道题。

    忘了初始化(l)(WA)了几发。

  • 相关阅读:
    onkeyup事件
    asp.net学习视频资料地址链接
    企业站新闻信息的后台功能开发心得(1)
    js实现切换导航
    jquery实现上拉加载更多
    css设置input框没有边框,选中时取消背景色
    使用js修改url地址参数
    ubantu 修改hosts文件
    git的使用
    ubantu 16.04 菜单栏的位置变换
  • 原文地址:https://www.cnblogs.com/ChiTongZ/p/11181271.html
Copyright © 2011-2022 走看看