题目:

这个题目竟然叫中国好区间,要不要脸。欸,不得不说还蛮顺口的,哈哈哈。

首先我们有一个数组a。可以递推得来,O(n)时间复杂度。

定义left(有效区间的左端点),bigger(有效区间中大于等于T的数的数量)。

有效区间:a[left]~a[i],好区间:保持区间中有k个 >= T 的值。

好区间的数量:ans。

思路:

如果现在到了第i个值a[i]。

可能有以下四种情况。

1.bigger >= k && a[i] >= T

      bigger++,将left右移至有效区间中只有k个>=T的数,且a[left] >= T 。ans += left。(因为a[j]~a[i]( 1 <= j <= left)共left个全是好区间)

2.bigger >= k && a[i] < T  

      ans += left。理由同上。

3.bigger < k && a[i] >= T  

      bigger++,{如果bigger==k(有效区间中大于等于T数量为k,正好成为好区间),将left右移至a[left] >= T。 ans+= left。理由同上。}

4.bigger < k && a[i] < T

      不做处理,因为bigger,left,ans都没变。

代码:

#include <bits\stdc++.h>
using namespace std;
typedef long long ll; ll n,k,T,b,c,p;
ll a[];
int main(){
cin >> n >> k >> T >> a[] >> b >> c >> p;
int bigger = ;
int left = ;
ll ans = ;
for(int i = ;i <= n; i++){
a[i] = (a[i-]*b+c)%p;
// cout << a[i] << " ";
if(bigger >= k){
if(a[i] >= T){
bigger++;
int c = ;
for(int j = left;j <= i; j++){
if(a[j] < T){ left++;continue;}
else if(c > ){ left++,c--;continue; }
break;
}
ans += left;
}else{
ans += left;
}
}else{
if(a[i] >= T){
bigger++;
if(bigger == k){
for(int j = left;j <= i; j++){
if(a[j] < T){ left++;continue;}
break;
}
ans += left;
}
}
}
// cout << ans << endl;
}
cout << ans << endl;
return ;
}
//writed by zhangjiuding

51 nod 1495 中国好区间 奇葩卡时间题 700ms 卡O(n*log(n)), 思路:O(n)尺取法的更多相关文章

  1. 51 nod 1495 中国好区间

    1495 中国好区间 基准时间限制:0.7 秒 空间限制:131072 KB 分值: 80 难度:5级算法题   阿尔法在玩一个游戏,阿尔法给出了一个长度为n的序列,他认为,一段好的区间,它的长度是& ...

  2. 51nod 1495 中国好区间

    阿尔法在玩一个游戏,阿尔法给出了一个长度为n的序列,他认为,一段好的区间,它的长度是>=k的,且该区间的第k大的那个数,一定大于等于T.那么问题来了,阿尔法想知道有多少好的区间. 由于阿尔法的序 ...

  3. 51 nod 1079 中国剩余定理

    1079 中国剩余定理 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 一个正整数K,给出K Mod 一些质数的结果,求符合条件的最小的K.例如,K % ...

  4. 51nod1495 中国好区间

    双指针扫一遍 #include<cstdio> #include<cstring> #include<cctype> #include<algorithm&g ...

  5. NOI2016区间bzoj4653(线段树,尺取法,区间离散化)

    题目描述 在数轴上有 \(N\) 个闭区间 \([l_1,r_1],[l_2,r_2],...,[l_n,r_n]\) .现在要从中选出 \(M\) 个区间,使得这 \(M\) 个区间共同包含至少一个 ...

  6. 51 nod 1766 树上的最远点对(线段树+lca)

    1766 树上的最远点对 基准时间限制:3 秒 空间限制:524288 KB 分值: 80 难度:5级算法题   n个点被n-1条边连接成了一颗树,给出a~b和c~d两个区间,表示点的标号请你求出两个 ...

  7. FFT版题 [51 Nod 1028] 大数乘法

    题目链接:51 Nod 传送门 数的长度为10510^5105,乘起来后最大长度为2×1052\times10^52×105 由于FFT需要把长度开到222的次幂,所以不能只开到2×1052\time ...

  8. 51 nod 1439 互质对(Moblus容斥)

    1439 互质对 题目来源: CodeForces 基准时间限制:2 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 有n个数字,a[1],a[2],…,a[n].有一个集合,刚开 ...

  9. 51 nod 1427 文明 (并查集 + 树的直径)

    1427 文明 题目来源: CodeForces 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 160 难度:6级算法题   安德鲁在玩一个叫“文明”的游戏.大妈正在帮助他. 这个游 ...

随机推荐

  1. 归并排序—Java版

    一开始做算法的时候,感觉递归算法很绕,所以我就在阅读别人代码的基础上,对代码每一步都添加自己的注解,方便我以后的学习. public class MergeSort { /** * 归并排序 * @p ...

  2. Redis订阅和发布模式和Redis事务

    -------------------Redis订阅和发布模式------------------- 1.概念     Redis 发布订阅(pub/sub)是一种消息通信模式:     发送者(pu ...

  3. css关键字unset

    今天遇到了一个css属性 display:unset 以为是新增的display的属性值,查了好久,发现并没有这个属性值, 后来发现了unset是css的关键字,将一个属性的属性值设置为unset,目 ...

  4. Keil报错failed to execute 'd:\Keil\C51\BIN\C51.EXE'

    关于老师发的keil软件报错如下: --- Error: failed to execute 'd:\Keil\C51\BIN\C51.EXE' 错误是因为老师直接拷贝的安装目录,里面的文件路径设置仍 ...

  5. 《个人-GIT使用方法》

    使用GIT版本控制工具及基本使用方法(安装,新建,推送,拉取),托管平台的使用方法. Git 常用命令 git init here -- 创建本地仓库(repository),将会在文件夹下创建一个 ...

  6. 关联本地文件夹到github项目

    git init git remote add origin https://自己的仓库url地址 git status git add . git commit -m '[提交内容的描述]' 先 p ...

  7. jvm系列 (五) ---类的加载机制

    类的加载机制 目录 jvm系列(一):jvm内存区域与溢出 jvm系列(二):垃圾收集器与内存分配策略 jvm系列(三):锁的优化 jvm系列 (四) ---强.软.弱.虚引用 我的博客目录 什么是类 ...

  8. 在windows中,使用SSH登录VMware ubuntu linux虚拟机

    测试环境 主机:window7 sp1 64位 专业版 虚拟机:VMware workstation 12 player 虚拟机操作系统: ubuntu 16.4 目标:在ubuntu下运行SSH服务 ...

  9. 深入剖析java迭代器以及C#迭代器!

    目录: 知道迭代器接口Iterable 为什么java的for增强可以自动迭代 那些类可以被迭代 通过什么方法迭代 1.知道迭代器接口Iterable 解析: 迭代器(iterator)是一种对象,它 ...

  10. Java运算符和流程控制

    1 运算符 1.1  比较运算符 比较运算符的结果都是boolean类型,也即是要么是true,要么是false. 比较运算符"=="不能写成"=". > ...