Haybale Feast 发表于 2019-09-27 阅读次数: Valine: 本文字数: 818 阅读时长 ≈ 1 分钟 链接:https://ac.nowcoder.com/acm/contest/625/C来源:牛客网 12345678910111213141516171819202122232425262728293031323334353637#include <bits/stdc++.h>using namespace std;const int maxn=1e5+5;const int INF=0x3f3f3f3f;typedef long long ll;int n;ll m;int f[maxn];int s[maxn];int p[maxn];int head=1,tail=0;int ind=1;int main(){ //freopen("data.in","r",stdin); scanf("%d%lld",&n,&m); for(int i=1;i<=n;i++) scanf("%d%d",&f[i],&s[i]); ll sum=0; ll ans=INF; for(int i=1;i<=n;i++) { sum+=f[i]; while(ind<=i&&sum-f[ind]>=m){ sum-=f[ind]; ind++; //找到满足条件的ind位置 } while(head<=tail&&p[head]<ind) head++; //当队首的位置小于ind位置,队首出队 while(head<=tail&&s[p[tail]]<=s[i]) tail--; //当 当前元素大于队尾,出队 p[++tail]=i; //入队 if(sum>=m) ans=min(ans,(ll)s[p[head]]); //当满足条件时,求最优解 } printf("%lld\n",ans); return 0;} -------------本文结束感谢您的阅读------------- 本文作者: EiffelZero 本文链接: https://ihopezero.github.io/2019/09/27/Haybale-Feast/ 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!