1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
#include<algorithm> #include<cstring> using namespace std; namespace io{ #define re register #define ll long long #define inf 0x3f3f3f3f #define il inline #define in1(a) read(a) #define in2(a,b) in1(a),in1(b) #define in3(a,b,c) in2(a,b),in1(c) #define in4(a,b,c,d) in2(a,b),in2(c,d) il void (ll &x){ x=0;ll f=1;char c=getchar(); while(c<'0'||c>'9'){if(c=='-')f=-f;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} x*=f; } il void read(int &x){ x=0;int f=1;char c=getchar(); while(c<'0'||c>'9'){if(c=='-')f=-f;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} x*=f; } }using namespace io; #define N 100005 #define ls p<<1 #define rs p<<1|1 int n; ll m; int a[N],b[N],tree[N<<2]; il void up(int p){ tree[p]=max(tree[ls],tree[rs]); } void build(int p,int l,int r){ if(l==r){ tree[p]=b[l]; return; } int mid=(l+r)>>1; build(ls,l,mid); build(rs,mid+1,r); up(p); } int query(int p,int l,int r,int ql,int qr){ if(ql<=l&&r<=qr) return tree[p]; int res=0,mid=(l+r)>>1; if(ql<=mid) res=max(res,query(ls,l,mid,ql,qr)); if(qr>mid) res=max(res,query(rs,mid+1,r,ql,qr)); return res; } int main(){ read(n); readl(m); for(re int i=1;i<=n;i++) in2(a[i],b[i]); build(1,1,n); int ans=inf; ll sum=0; for(re int i=1,j=0;i<=n&&j<=n;i++){ while(sum<m&&j<n){ j++; sum+=a[j]; } if(sum<m) break; ans=min(ans,query(1,1,n,i,j)); sum-=a[i]; } printf("%d",ans); return 0; }
|
近期评论