nyoj 975 Distinct Count
Distinct Count
- 描述
- 给一个长度为 n 的数列 {an} ,找出有多少个长度为 m 的区间,使区间中不含有重复的数字。
- 输入
- 多组测试数据。(200组)
第 1 行有 2 个数,n,m。(1<=n,m<=10^5)
接下来 1 行有 n 个数,ai。(|ai|<=10^9) - 输出
- 1 行有 1 个数,满足条件的区间的个数。
- 样例输入
-
6 3
1 6 2 6 3 6 - 样例输出
-
2
讲解:昨天下午和晚上,我和zz都在想这道题,昨天夜里睡觉之前想了下,还是没思路,今天早晨读书时突发灵感啊,算是想清楚了,嘎嘎,特来纪念一下;
我们可以采用左减,右加的方式来解决;依次向右滑动;
线把前m个出现的数标记成1,当然会有重复的,于是用 map 进行计重;map的指向为与之相同前一个数的下标;
也就是说把n个中出现多次的数,只把,最后一个数,标记为1,前面的都为0;然后求和时,这个数,就算了一次;
案例:sum 每 n个数的和;
7 3
1 6 2 6 3 6 7
1 1 1 sum=3;
1 0 1 1 sum=sum-b[1] =2
1 0 1 1 1 sum=sum+1-b[2]=3
1 0 1 0 1 1 sum=sum-b[3] =2 //当前的已经出现过了,不在加了,只减去前面的
1 0 1 0 1 1 1 sum=sum+1-b[4]=3 AC代码:#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<queue>
using namespace std;
const int N=1e5+;
int a[N],b[N];
int main()
{
int ans,sum,m,n;
map<long long ,int >ma;
while(cin>>m>>n)
{
ma.clear();
memset(b,,sizeof(b));
sum=;ans=;
for(int i= ; i<=m ;i++)
{
scanf("%d",&a[i]);
if(i<=n)
{
if(ma[ a[i] ]==)
{
sum=sum+; //统计前n个共有几个数;
ma[ a[i] ]=i; //标记一下,下标;
b[i]=; //如果此数没有出现,标记为1;
}
else {
b[ ma[i] ]=; //如果已经出现了,把前面的标记为0;
b[i]=; //当前的为1;
ma[ a[i] ]=i; //并更新下标,方便下一次更新;
}
}
} if(n==)
{ printf("%d\n",m);continue;}
if(sum==n)
ans++;
for(int i=n+,j=; i<=m ; i++,j++)
{
if(ma[a[i]]==)//前面没有出现过,直接更新sum,b,ma
{
sum=sum+;
ma[ a[i] ]=i;
b[i]=;
}
else { //出现过了的,前面相同的更新为0,同时更新为新的下标,当前位置标记为1;
b[ma[a[i]]]=;
ma[a[i]]=i;
b[i]=;
}
sum=sum-b[j]; //减去最前面的数,就是这n个数的和;然后判断 sum是否等于n;
if(sum==n)
ans++;
}
cout<<ans<<endl;
}
return ;
}
nyoj 975 Distinct Count的更多相关文章
- 大数据下的Distinct Count(二):Bitmap篇
在前一篇中介绍了使用API做Distinct Count,但是精确计算的API都较慢,那有没有能更快的优化解决方案呢? 1. Bitmap介绍 <编程珠玑>上是这样介绍bitmap的: B ...
- 大数据下的Distinct Count(一):序
在数据库中,常常会有Distinct Count的操作,比如,查看每一选修课程的人数: select course, count(distinct sid) from stu_table group ...
- MongoDB学习笔记——聚合操作之group,distinct,count
单独的聚合命令(group,distinct,count) 单独聚合命令 比aggregate性能低,比Map-reduce灵活度低:但是可以节省几行javascript代码,后面那句话我自己加的,哈 ...
- Sql优化(二) 快速计算Distinct Count
原创文章,始发自本人个人博客站点,转载请务必注明出自http://www.jasongj.com 个人博客上本文链接http://www.jasongj.com/2015/03/15/count_di ...
- SSAS 度量值中的distinct count局聚合方式会数为null的值
我们来看一个例子 Analysis Services: For Distinct Count measure NULL = 0 If you are to look at the table of v ...
- sql中Distinct&Count的用法
Distinct作用:消除重复的数值 1.如: select id from T1 select distinct id from T1 二者的检索效果如下: distinct可以用来修饰多列,如: ...
- distinct count
实验:查询一个column的无重复记录,需要知道有多少条记录,并显示记录. 统计记录用count(*)函数,无重复记录distinct,以emp表为例. (1)先查询无重复记录 [@more@] SQ ...
- linq语法之select distinct Count Sum Min Max Avg
原文来自:http://www.50cms.com/Pages_13_72.aspx 本篇详细说明linq中的Select和Count/Sum/Min/Max/Avg等的用法. Select/Dist ...
- ElasticSearch中"distinct","count"和"group by"的实现
最近在业务中需要使用ES来进行数据查询,在某些场景下需要对数据进行去重,以及去重后的统计.为了方便大家理解,特意从SQL角度,方便大家能够理解ES查询语句. 1 - distinct ; { &quo ...
随机推荐
- (判断url文件大小)关于inputStream.available()方法获取下载文件的总大小
转自:http://hold-on.iteye.com/blog/1017449 如果用inputStream对象的available()方法获取流中可读取的数据大小,通常我们调用这个函数是在下载文件 ...
- 智普教育Python视频教程之入门基础篇,python笔记
智普教育Python视频教程之入门基础篇,python笔记 print id()内存地址 type()变量类型 windows命令行下edit命令 python数据类型不需要指定类型 定义hostna ...
- HDU 4886 TIANKENG’s restaurant(Ⅱ) hash+dfs
题意: 1.找一个字符串s使得 s不是给定母串的子串 2.且s要最短 3.s在最短情况下字典序最小 hash.,,结果t掉了...加了个姿势怪异的hash值剪枝才过.. #include <cs ...
- Django出现的错误1.TypeError: view must be a callable or a list/tuple in the case of include().1.TypeError: view must be a callable or a list/tuple in the case of include().
.TypeError: view must be a callable or a list/tuple in the case of include(). 原因: url(r"^upload ...
- linux(虚拟机中)与windows共享文件两种方法
Windows 下用 SourceInsight 与 Linux 协作编码 习惯了用SourceInsight 读写代码,在Linux下一时没找到类似的工具,vi的操作也不熟,偶尔看看或小 ...
- [Python爬虫] 之十一:Selenium +phantomjs抓取活动行中会议活动信息
一.介绍 本例子用Selenium +phantomjs爬取活动行(http://www.huodongxing.com/search?qs=数字&city=全国&pi=1)的资讯信息 ...
- spinner自定义,效果如腾讯QQ账号选择时候的下拉列表
下拉列表在android中自带spinner的有时候不太适合我们的界面,我们希望有自己的一种显示方法,那怎么办?自定义Spinner.效果如QQ账号选择一样.如图所以. 这种效果,如果你喜欢 ...
- Java中常用的6种排序算法详细分解
排序算法很多地方都会用到,近期又重新看了一遍算法,并自己简单地实现了一遍,特此记录下来,为以后复习留点材料. 废话不多说,下面逐一看看经典的排序算法: 1. 选择排序 选择排序的基本思想是遍历数组的过 ...
- LVS-负载均衡
LVS: LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一.章 ...
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何声明定时器,使用定时器TON模块 TC3
TON功能块功能: 当输入为高电平时,计时器开始计时,CV表示计时器计时的当前值,而PV则是计时的目标值,当CV的值等于PV的值时,输出置1. 在主程序接下去的地方按下F2并添加TON功能块. ...