二分+前缀和. #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #define maxn 200500 #define inf 0x7f7f7f7f7f7f7f7fll using namespace std; ; long long s1[maxn],s2[maxn]; long long check(long l…
题目大意: 额--貌似蛮清晰的,就不赘述了. 思路: 首先不难发现M越大Y越小,因此可以二分答案(方向不要弄错),二分出最小的不小于S的Y即可.而计算Y时可用前缀和O(n+m)求得.两种边界情况也要考虑一下(同时long long不要少开). 代码: #include<cstdio> #include<iostream> using namespace std; #define ll long long ; int n,m,i,h,t,k,mn,mx,mid,w[M],v[M],l…