SCUT - 243 - 宝华复习 - 二分 - 桶计数
2024-10-21 03:39:30
https://scut.online/p/243
这道题唯一难点在于如何快速确定m合法。可以统计滑动窗口中已有元素的数量。
#include<bits/stdc++.h>
using namespace std;
#define ll long long int n;
int a[]; int suma[];
int sum; int cnta[];
int cntsum; bool ok(int m){
memset(cnta,,sizeof(cnta));
cntsum=; for(int i=;i<m;i++){
if(cnta[a[i]]==){
cntsum++;
}
cnta[a[i]]++;
} if(cntsum==sum){
//m ok
return ;
} for(int i=m;i<n;i++){
{
cnta[a[i-m]]--;
if(cnta[a[i-m]]==)
cntsum--;
if(cnta[a[i]]==)
cntsum++;
cnta[a[i]]++;
}
if(cntsum==sum){
//m ok
return ;
}
} return ;
} int main(){ while(~scanf("%d",&n)){
sum=;
memset(suma,,sizeof(suma));
for(int i=;i<n;i++){
scanf("%d",&a[i]);
if(suma[a[i]]==){
sum++;
}
suma[a[i]]++;
} //printf("sum=%d\n",sum); int l=,r=n,m; int res=;
while(l<=r){
m=(l+r)/;
//cout<<m<<endl;
if(m==l){
if(ok(m)){
res=l;
}
else{
res=r;
}
break;
}
if(ok(m))
r=m;
else
l=m+;
} printf("%d\n",res);
}
}
最新文章
- 微信小程序即将开放申请?微信小论坛小程序专场16日或可见分晓
- zepto源码--核心方法6(显示隐藏)--学习笔记
- mysql中的null字段值的处理及大小写问题
- 2014-07-28 使用Axure RP进行手机端BBS的原型设计
- windows下配置lamp环境(5)---配置MySQL5.6
- week 与 strong区别 精辟的解释
- 在cmd中输入ls命令出现“ls不是内部或外部命令解决
- centos 更改hostname
- CSS:CSS学习总结
- Linux下设置SSH端口
- bzoj 3812: 主旋律 [容斥原理 状压DP]
- python生成可执行exe文件
- python将文本转化成语音并播放
- mysql设置指定ip访问,用户权限相关操作
- linux环境下pytesseract的安装和央行征信中心的登录验证码识别
- input文字垂直居中和按钮对齐问题,兼容IE8
- 基于R实现k-means法与k-medoids法
- 用Vue.js递归组件构建一个可折叠的树形菜单
- poj 3498(最大流+拆点)
- PhoneGap Android环境搭建