Distinct Count

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述
给一个长度为 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的更多相关文章

  1. 大数据下的Distinct Count(二):Bitmap篇

    在前一篇中介绍了使用API做Distinct Count,但是精确计算的API都较慢,那有没有能更快的优化解决方案呢? 1. Bitmap介绍 <编程珠玑>上是这样介绍bitmap的: B ...

  2. 大数据下的Distinct Count(一):序

    在数据库中,常常会有Distinct Count的操作,比如,查看每一选修课程的人数: select course, count(distinct sid) from stu_table group ...

  3. MongoDB学习笔记——聚合操作之group,distinct,count

    单独的聚合命令(group,distinct,count) 单独聚合命令 比aggregate性能低,比Map-reduce灵活度低:但是可以节省几行javascript代码,后面那句话我自己加的,哈 ...

  4. Sql优化(二) 快速计算Distinct Count

    原创文章,始发自本人个人博客站点,转载请务必注明出自http://www.jasongj.com 个人博客上本文链接http://www.jasongj.com/2015/03/15/count_di ...

  5. SSAS 度量值中的distinct count局聚合方式会数为null的值

    我们来看一个例子 Analysis Services: For Distinct Count measure NULL = 0 If you are to look at the table of v ...

  6. sql中Distinct&Count的用法

    Distinct作用:消除重复的数值 1.如: select id from T1 select distinct id from T1 二者的检索效果如下: distinct可以用来修饰多列,如: ...

  7. distinct count

    实验:查询一个column的无重复记录,需要知道有多少条记录,并显示记录. 统计记录用count(*)函数,无重复记录distinct,以emp表为例. (1)先查询无重复记录 [@more@] SQ ...

  8. 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 ...

  9. ElasticSearch中"distinct","count"和"group by"的实现

    最近在业务中需要使用ES来进行数据查询,在某些场景下需要对数据进行去重,以及去重后的统计.为了方便大家理解,特意从SQL角度,方便大家能够理解ES查询语句. 1 - distinct ; { &quo ...

随机推荐

  1. JSON相关

  2. jquery next()方法

    1.html代码 <!DOCTYPE html> <html> <head> <script type="text/javascript" ...

  3. [Git] git shortlog 找出最懒的程序员

    转载:http://blog.csdn.net/qinjienj/article/details/7795802 场景假设:一个开发小组有10个程序员,他们用 Git 做版本控制,某一天程序员A pu ...

  4. 万里长征第二步——django个人博客(第五步 ——配置后台admin)

    在urls.py文件中配置admin路径 from django.conf.urls import url from django.contrib import admin from blog.vie ...

  5. iOS: 环信的推送

    原文:http://m.blog.csdn.net/article/details?id=38824551 1.先创建一个apns证书,链接如下 http://developer.easemob.co ...

  6. iOS:quartz2D绘图 (动画)

    quartz2D可以用来绘制自己需要的图形,它们绘制出来的是一个静态的图形,那么如何绘制一个动态的图形呢?动态的图形就是动画,所谓动画,其实就是很多张图片在短时间内不停的切换所产生的一种视觉效果.qu ...

  7. mysql之事件的开启和调用

    1.检测事件是否开启 mysql> show variables like 'event_scheduler';+-----------------+-------+| Variable_nam ...

  8. 自制DEV皮肤

    1.打开DEV自带的皮肤制作工具 2.创建一个新的皮肤工程[File][New] 3.改变指定控件的颜色,比如背景色 4.改变控件边框的颜色.粗细

  9. Python datetime 格式化字符串:strftime()

    Python datetime 格式化字符串:strftime()   Python 的datetime模块 其实就是date和time 模块的结合, 常见的属性方法都比较常用 比如: datetim ...

  10. [Algorithm] Find Nth smallest value from Array

    Q1: Find the smallest value from array: function findMin(arr) { let min = arr[0]; for (let i = 1; i ...