CodeForces Round #143(231C) - To Add or Not to Add
2012-10-11 14:41
423 查看
基本思路是每次确定上界..二分找下界的最小合法值....
那么关键就在于如何快速得出两个位置之间需要做的操作次数...如样例中的数据
a=6 3 4 0 2
先排序为:
a=0 2 3 4 6
预处理..算出要使小于a[i]的数要做几次操作才能全等于a[i]...那么对应的值为
s=0 2 4 7 15
如果要问3~6要全等于a[6]所需的操作次数..及3 4 6全等于6...先算出0 2 6的次数sum..然后用s[6]-sum..则是所需...而0 2 6的计算为 2*(a[6]-a[2])+s[2]....所以可以算出3 4 6要全为6...操作次数为s[6]-sum=15-10=5
Program:
那么关键就在于如何快速得出两个位置之间需要做的操作次数...如样例中的数据
a=6 3 4 0 2
先排序为:
a=0 2 3 4 6
预处理..算出要使小于a[i]的数要做几次操作才能全等于a[i]...那么对应的值为
s=0 2 4 7 15
如果要问3~6要全等于a[6]所需的操作次数..及3 4 6全等于6...先算出0 2 6的次数sum..然后用s[6]-sum..则是所需...而0 2 6的计算为 2*(a[6]-a[2])+s[2]....所以可以算出3 4 6要全为6...操作次数为s[6]-sum=15-10=5
Program:
#include<iostream> #include<stdio.h> #include<algorithm> #include<string.h> #include<math.h> #include<map> #include<queue> #include<stack> #include<set> #define ll long long #define oo 2000000000 #define pi acos(-1) using namespace std; ll n,k,m,a[100005],s[100005]; int main() { scanf("%I64d%I64d",&n,&k); ll i,j,sum,ans1,ans2; for (i=1;i<=n;i++) scanf("%I64d",&a[i]); sort(a+1,a+1+n); s[0]=0; for (i=2;i<=n;i++) s[i]=s[i-1]+(a[i]-a[i-1])*(i-1); ans1=0; for (i=1;i<=n;i++) { int l,r,mid; l=0; r=i+1; while (r-l>1) { mid=(l+r)/2; sum=s[i]-(s[mid-1]+(mid-1)*(a[i]-a[mid-1])); if (sum>k) l=mid; else r=mid; } if (i-r+1>ans1) { ans1=i-r+1; ans2=a[i]; } } printf("%I64d %I64d\n",ans1,ans2); return 0; }
相关文章推荐
- To Add or Not to Add CodeForces - 231C
- To Add or Not to Add CodeForces - 231C 尺取
- CodeForces 231C To Add or Not to Add
- Codeforces-231C-To Add or Not to Add(二分搜索)
- Codeforces Round #143 (Div. 2)-231C-To Add or Not to Add
- codeforces 143 C.To Add or Not to Add (YY 二分 处理一下前缀和)
- Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final) E. Down or Right
- Educational Codeforces Round 2 B. Queries about less or equal elements
- Codeforces Round #239 (Div. 2) A. Line to Cashier(简单题)
- The service cannot be activated because it does not support ASP.NET compatibility. ASP.NET compatibility is enabled for this application. Turn off ASP.NET compatibility mode in the web.config or add the AspNetCompatibilityRequirements attribute to the ser
- Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify pr
- ”***" isn't code signed but requires entitlements. It is not possible to add entitlements
- cidefirces Educational Codeforces Round 2 B Queries about less or equal elements
- 【Educational Codeforces Round 2B】【map or 二分查找】Queries about less or equal elements b[]中的每个数比a[]中多少数大
- Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces
- Educational Codeforces Round 15_D. Road to Post Office
- Educational Codeforces Round 21-E-贪心背包or
- codeforces Round #320 (Div. 2) C. A Problem about Polyline(数学) D. "Or" Game(暴力,数学)
- CodeForces Round #143(231B) - Magic, Wizardry and Wonders
- Educational Codeforces Round 7 C. Not Equal on a Segment 并查集