当前位置: 首页 > wzjs >正文

福州建设部官方网站网站设计 版权

福州建设部官方网站,网站设计 版权,长春百度搜索排名优化,有没人做阿里巴巴网站维护的D-又放学辣&#xff08;进阶&#xff09;_牛客小白月赛80 (nowcoder.com) 思路&#xff1a; 求最大值的最小值&#xff0c;》二分&#xff1b; 对于check函数&#xff0c;我们要统计cnt&#xff08;a[i]-t)的和(t为二分的量),如果cnt<k&#xff0c;说明答案小于t&#xf…

D-又放学辣(进阶)_牛客小白月赛80 (nowcoder.com)

思路:

求最大值的最小值,=》二分;

对于check函数,我们要统计cnt=\sum_{1}^{m}(a[i]-t)的和(t为二分的量),如果cnt<k,说明答案小于t,否则大于t;

时间复杂度为:n*log(n)*log(n)

代码:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<math.h>
#include<unordered_map>
#include<map>
using namespace std;
typedef long long LL;
#define  per(i,a,b)  for(int i=a;i<=b;i++) 
const int  N = 1e6 + 100;
int n, k, m, sum, mi;
int  a[N], x, b[N];
int  c[N];
bool cmp(int x, int y)
{
    return x > y;
}
int check(int x, int i)
{   
    int l = 1, r = m, mid, ans = 0, cha;
    while (l <= r)
    {
        mid = (l + r) / 2;
        if (b[mid] >= x)
            ans = mid, l = mid + 1;
        else
            r = mid - 1;
    }
    if (b[ans] <= a[i])
        cha = c[ans] - a[i] - (ans - 1) * x;
    else
        cha = c[ans] - ans * x;
    if (cha <= k||ans==0) return 1;
    return 0;
}
int main()
{
    scanf("%d%d%d", &n, &m, &k);
    per(i, 1, n)
    {
        scanf("%d", &x);
        a[x]++;
    }
    per(i, 1, m) b[i] = a[i];
    sort(b + 1, b + 1 + m, cmp);
    per(i, 1, m) c[i] = c[i - 1] + b[i];
    int l, r, mid;
    per(i, 1, m)
    {
        if (n < k + a[i])
        {
            printf("-1 ");
            continue;
        }
        l = 0;
        r = n - k - a[i];
        mi = -1;
        while (l <= r)
        {
            mid = (l + r) >> 1;
            int y = check(mid, i);
            if (y)
            {
                   r = mid - 1;
                    mi = mid;
            }
            else
                l = mid + 1;
        }
        printf("%d ", mi);
    }
    return 0;
}

思路二:

我们将b[x]代表大于x的总人数;

最开始有一次循环b[a[i]-1]++,表示大于a[i]的数+1;

第一次差分(从后往前):b[i]代表大于i的数有多少个;

第二次差分(从后往前):b[i]代表大于i总共有多少。

代码:

.#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<math.h>
#include<unordered_map>
#include<map>
using namespace std;
typedef long long LL;
#define per(i,a,b) for(int i=a;i<=b;i++)
#define ber(i,a,b) for(int i=a;i>=b;i--)
const int  N = 1e6 + 100;
int n, k, m, mi;
int  a[N], x, b[N]; 
int check(int x, int i)
{
    int y=b[x];
    if (a[i] > x)
        y -= (a[i] - x);
    return y<=k;
}
int main()
{
    scanf("%d%d%d", &n, &m, &k);
    per(i, 1, n)
    {
        scanf("%d", &x);
        a[x]++;
    }
    per(i, 1,m)
        b[a[i]-1]++;
    ber(i, n, 0)
        b[i] += b[i+1];
    ber(i, n, 0)
        b[i] += b[i+1];
    int l, r, mid;
    per(i, 1, m)
    {
        if (n< k + a[i])
        {
            printf("-1 ");
            continue;
        }
        l = 0;
        r = n - k- a[i];
        mi = -1;
        while (l <= r)
        {
            mid = (l + r) >> 1;
            int y = check(mid, i);
            if (y)
            {
                r = mid - 1;
                mi = mid;
            }
            else
                l = mid + 1;
        }
        if (mi == -1) printf("-1 ");
        else printf("%d ", mi);
    }
    return 0;
}


文章转载自:

http://lOcTiZPE.jfbrt.cn
http://ejsrbYBo.jfbrt.cn
http://Gq4iDp4P.jfbrt.cn
http://eNmify8M.jfbrt.cn
http://WQKnUxQz.jfbrt.cn
http://HbQ7BcsS.jfbrt.cn
http://1C3a5BPq.jfbrt.cn
http://0io6O574.jfbrt.cn
http://lozV1hZF.jfbrt.cn
http://34YNd5h6.jfbrt.cn
http://uWbscckT.jfbrt.cn
http://6fthm0Dp.jfbrt.cn
http://UFdLOM6a.jfbrt.cn
http://o8Fl4sT3.jfbrt.cn
http://kLVzPJou.jfbrt.cn
http://16NqQXol.jfbrt.cn
http://cRT9fMEe.jfbrt.cn
http://SVsOg6gN.jfbrt.cn
http://DmEf0duo.jfbrt.cn
http://ctKPoAEf.jfbrt.cn
http://L1h2smSy.jfbrt.cn
http://mFNhA4hD.jfbrt.cn
http://fMtcfOQz.jfbrt.cn
http://N7JDLpIQ.jfbrt.cn
http://h4SY1b8Y.jfbrt.cn
http://okgDycRz.jfbrt.cn
http://i9Cs8gSw.jfbrt.cn
http://DBeSCtyF.jfbrt.cn
http://aOGR4sTI.jfbrt.cn
http://ct73npzz.jfbrt.cn
http://www.dtcms.com/wzjs/643283.html

相关文章:

  • 做信息网站能挣钱吗网站优化目的
  • 织梦音乐网站网页小游戏下载
  • 公司网站管理图片wordpress云视链
  • 个人做外贸网站wordpress调用随机文章代码
  • 做申诉资料网站营业执照网上申请
  • 厦门网站建设团队制作简单的网页的软件
  • 南通网站建设开发wordpress产品详情页
  • 网站头部设计优化嘉兴市建设局网站
  • 怎么用本机ip做网站设计房子的软件免费
  • 怎样建设好网站wordpress商城视频
  • 怎么在百度上做单位网站合肥网络公司排名
  • 公司网站建设全什么是品牌网站建设
  • 景安一个空间怎么做多个网站做网站公司的排名
  • 怎么查出这个网站是谁做的苏州市建设中心网站首页
  • 开发建设网站的实施过程是一个唐山 网站建设
  • 资深的环保行业网站开发指数基金定投技巧
  • 做摄影网站的目的是什么意思如何管理手机网站首页
  • 免费游戏源码网深圳网站的优化公司哪家好
  • 做网站的分页查询建设网站政策风险
  • 营销 网站制作创建网站大约多少钱
  • 附近网站建设公司哪家好加强网站建设 基本措施
  • 做化妆品销售网站如何注册50万公司一年税是多少
  • 怎样做电商网站怎么让网站页面自适应
  • 我要做网站wordpress 支持rar
  • 网站邮箱接口怎么设置快速网站价格
  • 网站建设个人工作总结襄阳seo站内优化
  • 网站设计模板百度云网页制作报价单
  • 医院网站详细设计网易企业邮箱 登录
  • 做有奖竞猜网站违法吗安康做网站公司
  • 杭州广告公司网站建设重庆中小企业网站建设公司