传送门:

点我

6121: 学长的情书 

时间限制(普通/Java):2000MS/6000MS     内存限制:65536KByte
总提交: 79            测试通过:2

描述

抹布收到了一封情书,但是这封情书上只有一串数字,发信人多半是将想要表达的意思隐藏在这串数字里,但是直男抹布怎么看得出来呢。抹布对着这串数字百思不得其解,十分苦恼,当然了,一味的苦恼不是抹布的性格,他决定苦中作乐,他想知道,这串数字中有多少组"优美子序列"。他定义,如果某个连续 的子序列中恰好包含k个偶数数字,就称这个序列为"优美子序列"。

现在你看到抹布竟然对着这样一封有着特殊含义的情书玩起了毫不相干的游戏,你看不下去了,你决定...帮助他解出这个问题。

输入

输入数据多组,以EOF结束。

每组数据第一行,包含两个正整数n,k,表示n个数字,k的含义与描述中相同。(1<=n<=10^5,0<=k<=5*10^4)

接下来一行,包含n个正整数m,每个数字之间用一个空格隔开。(1<=m<=10^5)

数据组数小于110组。

输出

对于每组输入,输出优美子序列的组数,占一行。

样例输入

5 3
2 2 1 2 2

样例输出

2

提示

【样例说明】恰好包含3个偶数的连续子序列只有2个,分别是[2,2,1,2],[2,1,2,2]。

【数据范围】

对于45%的数据,1<=n<=10^3,0<=k<=10^3。

对于90%的数据,1<=n<=10^4,0<=k<=10^4。

对于100%的数据,1<=n<=10^5,0<=k<=5*10^4。

吐槽:

看到2KMS,想了个nlogn的二分去大力莽了。。

思路:

老年人做法
预处理偶数的前缀和。
比如说
样例 2 2 1 2 2
前缀和sum数组是1 2 2 3 4
对每个位置pos,对前缀和数组的操作是对pos之后的位置进行二分查找到sum[pos-1]+k,第一个等于这个数位置posLeft和最后一个等于这个数的位置posRight
差值就是当前位置对答案的贡献:ans += posRight-posLeft+1

trick:

1、当K等于0时候,如果二分写的不好要过滤一下(二分写的好的话可能不用?存疑)

2、ans要用long long

复杂度O(nlogn)

应该有双指针的贡献算法更快(待补)

代码:

#include"bits/stdc++.h"
using namespace std;
typedef long long LL;
int a[],k,n;
int sum[];
int SolveLeft(int begin){
int l = begin,r = n;
int key = sum[begin-] + k;
int ans = ;
while(l <= r){
int mid = (l+r) >> ;
if(sum[mid] >= key){
r = mid-;
ans = mid;
}else{
l = mid+;
}
}
return ans;
}
int SolveRight(int begin){
int l = begin,r = n;
int key = sum[begin-] + k;
int ans = ;
while(l <= r){
int mid = (l+r) >> ;
if(sum[mid] > key){
r = mid-;
}else{
l = mid+;
ans = mid;
}
}
return ans;
} int main(){
while(~scanf("%d%d",&n,&k)){
LL ans = ;
sum[] = ;
for(int i = ; i <= n ; i ++){
scanf("%d",a+i);
a[i] = (a[i]&) ? :;
sum[i] = ;
}
for(int i = ; i <= n ; i ++){
sum[i] = sum[i-]+a[i];
}
for(int i = ; i <= n ; i ++){
int L = SolveLeft(i);
int R = SolveRight(i);
if(R < i) continue; //当K等于0的时候会过滤掉误加
if(L != ){
ans += (R-L+1L);
}
}
cout<<ans<<endl;
}
}
/*
5 3
2 2 1 2 2 6 3
2 2 1 2 1 2 5 0
1 0 1 0 1 5 1
2 2 1 2 2 10 0
1 1 0 1 0 1 1 1 0 0 2 1
1 0 2 0
1 0
*/

TOJ 6121: 学长的情书 ( 二分)的更多相关文章

  1. 【TOJ 3369】CD(二分)

    描述 Jack and Jill have decided to sell some of their Compact Discs, while they still have some value. ...

  2. Luogu P1638 逛画展 【二分答案】

    题目描述 博览馆正在展出由世上最佳的 M 位画家所画的图画. wangjy想到博览馆去看这几位大师的作品. 可是,那里的博览馆有一个很奇怪的规定,就是在购买门票时必须说明两个数字, a和b,代表他要看 ...

  3. NOIP系列

    NOIP2015运输计划 唉 真是 这题 卡死我了 tarjan离线lca复杂度O(n) 最后各种卡常,多交几遍才A(洛谷104ms) %%%zk学长609ms 注意二分的时候左边界要定成0 根据题意 ...

  4. 4.28(TG模拟赛)总结

    1.挖地雷 题目背景 NOIp1996提高组第三题 题目描述 在一个地图上有N个地窖(N≤20),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径.当地窖及其连接的数据给出之后,某人可以从任 ...

  5. TOJ 3750: 二分查找

    3750: 二分查找   Time Limit(Common/Java):3000MS/9000MS     Memory Limit:65536KByteTotal Submit: 1925     ...

  6. toj 4353 Estimation(树状数组+二分查找)

    Estimation 时间限制(普通/Java):5000MS/15000MS     运行内存限制:65536KByte总提交: 6            测试通过: 1 描述 “There are ...

  7. BZOJ 1044 木棍分割 解题报告(二分+DP)

    来到机房刷了一道水(bian’tai)题.题目思想非常简单易懂(我的做法实际上参考了Evensgn 范学长,在此多谢范学长了) 题目摆上: 1044: [HAOI2008]木棍分割 Time Limi ...

  8. BZOJ-1196 公路修建问题 最小生成树Kruskal+(二分??)

    题目中一句话,最大费用最小,这么明显的二分的提示(by 以前morestep学长的经验传授)...但完全没二分,1A后感觉很虚.. 1196: [HNOI2006]公路修建问题 Time Limit: ...

  9. BZOJ-1189 紧急疏散evacuate BFS预处理+最大流+二分判定+神建模!!

    绝世污题,垃圾题,浪费我一整天青春! 1189: [HNOI2007]紧急疏散evacuate Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1262 ...

随机推荐

  1. xml入门与解析

    xml入门与解析 1.xml基础知识 xml:可扩展的标签语言,标签自定义. 作用:存储数据.(配置文件) 书写规范: 1.区分大小写 2.应该有一个根标签 3.标签必须关闭 <xx>&l ...

  2. JavaScript--开关思想

    就是男默女泪的立flag! <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  3. 微信小程序组件——详解wx:if elif else的用法

    背景 在学习微信小程序开发wxml页面时,需要使用if,else来判断组件是否进行展示,代码如下 <view wx:if="{{is_login==1}}">成功登录& ...

  4. POI解决内存溢出问题

    在POI3.8中SXSSF仅仅支持excel2007格式是对XSSF的一种流的扩展.目的在生成excel时候,需要生成大量的数据的时候,通过刷新的方式将excel内存信息刷新到硬盘的方式,提供写入数据 ...

  5. jquery解析XML文件实现的省市联动

    XML我是直接在网上下载的文件包 拿过来用的 jquery我用的是3.1的 前台页面 <form action="buy.html" method="get&quo ...

  6. javascript中字符的一些常规操作

    1,获取第一个字符 var str = "hello word"; console.log(str[0]); // h 2,获取最后一个字符 var str = "hel ...

  7. vue事件获取事件对象,vue获取事件源,vue event.currentTarget

    js的事件,如点击事件,可以直接用this获取事件对象,而jQuery可以使用$(this)来获取事件对象.vue必须借助事件的 event 对象 的 currentTarget 才能获取事件对象 v ...

  8. IoT SaaS加速器——助力阿尔茨海默病人护理

    场景介绍 阿尔茨海默病,是导致中老年人认知功能障碍的最常见疾病之一,是发生在老年期及老年前期的一种原发性退行性脑病.据估计,全世界痴呆症患者数量为4700万,到2030年将达到7500万人.痴呆症患者 ...

  9. auto uninstaller密钥激活码破解注册机ver 8.8.58

    auto uninstaller密钥破解注册机ver 8.8.58 楼主分享几个auto uninstaller密钥破解注册机,可以用于auto uninstaller 8.8.58 .因为每个版本的 ...

  10. SLS机器学习最佳实战:日志聚类+异常告警

    1.手中的锤子都有啥? 围绕日志,挖掘其中更大价值,一直是我们团队所关注.在原有日志实时查询基础上,今年SLS在DevOps领域完善了如下功能: 上下文查询 实时Tail和智能聚类,以提高问题调查效率 ...