链接:https://atcoder.jp/contests/abc143/tasks/abc143_f

题解:开两个数组,其中一个arr用来保存每个元素出现的次数,同时再开一个数组crr用来保存出现次数等于其下标的个数,然后对crr求前缀和,crr就变成了出现次数维护小于其小标的总个数。

根据题意:每次取k个,k个元素各不相同,问最多可以取多少次,假设可以取 x次,为了保证每个元素不相同,那么每个元素出现的次数最多为x次,并且总个数为k*x,因此这里可以用二分来判断。

AC代码:

//crr[i]指的是当前每个元素出现的次数小于i的总个数.
//取k个,一共取mid次,所以要求就是当前区间总个数应该大于等于mid*k。
//由于区间crr维护的是当前出现次数小于下标的元素个数,所以每次取都不会取得相同的元素。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=3E5+;
ll arr[N];
ll crr[N];
int main(){
int n;
cin>>n;
for(int i=;i<=n;i++){
ll x;
cin>>x;
arr[x]++;
crr[arr[x]]++;//这样可以让crr维护出现次数大于等于其下标的元素的个数。秒。。
}
for(int i=;i<=n;i++) crr[i]+=crr[i-];
for(int k=;k<=n;k++){
ll ans=;
ll left=,right=n;
while(left<=right){
ll mid=(left+right)/;
if(k*mid<=crr[mid]){
left=mid+;
ans=max(ans,mid);
}
else{
right=mid-;
}
}
cout<<ans<<endl;
}
return ;
}

F - Distinct Numbers的更多相关文章

  1. AtCoder Beginner Contest 143 F - Distinct Numbers

    题意 给出一个长度为NNN的序列,求对于所有k∈[1,N]k\in[1,N]k∈[1,N],每次从序列中选出kkk个互不相同的数,最多能取多少次. N≤3e5N\le3e5N≤3e5 题解 我们首先把 ...

  2. ABC143F Distinct Numbers

    这道题非常好.其思想类似于 $O(n \log n)$ 求最长上升子序列的算法. hint:考虑固定操作次数 $o$,$k$ 最大可取到多少? int n; scan(n); vi a(n); sca ...

  3. 30. Distinct Subsequences

    Distinct Subsequences OJ: https://oj.leetcode.com/problems/distinct-subsequences/ Given a string S a ...

  4. April Fools Contest 2017 题解&源码(A,数学 B,数学 C,数学 D,字符串 E,数字逻辑 F,排序,卡时间,G,数学)

    A. Numbers Joke time limit per test:2 seconds memory limit per test:64 megabytes input:standard inpu ...

  5. Codeforces Gym101502 F.Building Numbers-前缀和

    F. Building Numbers   time limit per test 3.0 s memory limit per test 256 MB input standard input ou ...

  6. BUG-FREE-For Dream

    一直直到bug-free.不能错任何一点. 思路不清晰:刷两天. 做错了,刷一天. 直到bug-free.高亮,标红. 185,OA(YAMAXUN)--- (1) findFirstDuplicat ...

  7. POJ1112 Team Them Up![二分图染色 补图 01背包]

    Team Them Up! Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7608   Accepted: 2041   S ...

  8. [leetcode] 题型整理之排列组合

    一般用dfs来做 最简单的一种: 17. Letter Combinations of a Phone Number Given a digit string, return all possible ...

  9. array题目合集

    414. Third Maximum Number 给一个非空的整数数组,找到这个数组中第三大的值,如果不存在,那么返回最大的值.要求时间复杂度为o(n) 例如: Example 1: Input: ...

随机推荐

  1. 使用sstream进行int转换string的注意事项

    个人网站 :http://39.106.25.239/ 1.引入sstream文件 2.使用stringstream 声明 3.使用一次sstream转换后要执行成员函数.clear() 来清除str ...

  2. test命令的使用以及判断语法

    test命令 Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值.字符和文件三个方面的测试. 语法:test EXPRESSION 或者 [ EXPRESSION ] 字符串判断( ...

  3. vue动态定义图片路径

     当我在html模块或者css中引入图片的时候用相对路径,例: <div> <img src="../../assets/img/policeImg/tt.png" ...

  4. window的三种系统弹框介绍

    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8 ...

  5. 使用datasest属性改变样式

    使用datasest属性改变样式 传统做法 对于html中的标签我们可以自定义标签中的属性,例如给input加一个aaa属性 <input type="text" aaa=& ...

  6. 意外发现PHP另一个显示转换类型 binary

    竟然不知道除了(string)$a之外,还有(binary)$a知道unset可以不加括号,但不知道还有这种写法(unset) 请看lex文件(php-7.1.8) <ST_IN_SCRIPTI ...

  7. Javascript-什么是递归?

    递归? 程序调用自身的编程技巧就称之为递归(recursion),就是再运行的过程中调用自己,本质上就是循环. 构成递归的条件有: Ⅰ.不能无限制的调用本身,必须有一个出口,化为简单的状况处理(非递归 ...

  8. python学习笔记--字符串格式化

    字符串和常量 print(r'hello\py\thon') r 代表后面字符不进行转义,原样输出; 表示常量,命名时变量名字大写代表常量.NAME = 'liulixue'; 字符串表示:' ', ...

  9. 六、【Docker笔记】Docker数据管理

    前几节我们介绍了Docker的基本使用和三大核心概念,那么我们在使用Docker的过程中,Docker中必然产生了大量的数据,对于这些数据我们需要查看或者对这些数据进行一个备份,也有可能容器之间的数据 ...

  10. ASP.NET CORE WEBAPI文件下载

    ASP.NET CORE WEBAPI文件下载 最近要使用ASP.NET CORE WEBAPI用来下载文件,使用的.NET CORE 3.1.考虑如下场景: 文件是程序生成的. 文件应该能兼容各种格 ...