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);
}
}

最新文章

  1. 微信小程序即将开放申请?微信小论坛小程序专场16日或可见分晓
  2. zepto源码--核心方法6(显示隐藏)--学习笔记
  3. mysql中的null字段值的处理及大小写问题
  4. 2014-07-28 使用Axure RP进行手机端BBS的原型设计
  5. windows下配置lamp环境(5)---配置MySQL5.6
  6. week 与 strong区别 精辟的解释
  7. 在cmd中输入ls命令出现“ls不是内部或外部命令解决
  8. centos 更改hostname
  9. CSS:CSS学习总结
  10. Linux下设置SSH端口
  11. bzoj 3812: 主旋律 [容斥原理 状压DP]
  12. python生成可执行exe文件
  13. python将文本转化成语音并播放
  14. mysql设置指定ip访问,用户权限相关操作
  15. linux环境下pytesseract的安装和央行征信中心的登录验证码识别
  16. input文字垂直居中和按钮对齐问题,兼容IE8
  17. 基于R实现k-means法与k-medoids法
  18. 用Vue.js递归组件构建一个可折叠的树形菜单
  19. poj 3498(最大流+拆点)
  20. PhoneGap Android环境搭建

热门文章

  1. android-problem——remount of /system failed: Read-only file system
  2. c程序设计语言第一章1
  3. jsp学习笔记总结
  4. router的安装和基本配置
  5. java 常量表达式
  6. mysql order by的一些技巧
  7. c++string 输入换行符
  8. Tomcat安全配置规范
  9. 20170224 SE11删除数据
  10. bootstrap的学习注意点