题目:

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

首先我们有一个数组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. windows环境下配置zookeeper

    环境: windows10 zookeeper版本:3.4.9 1.从官网 http://mirror.bit.edu.cn/apache/zookeeper/下载对应的版本 2.将下载的文件解压到任 ...

  2. JavaScript--我发现!原来你是这样的JS(1)

    一.前言: 前段时间看红宝书(JavaScript高级程序设计),但没有计划的去看,也没有做详细的笔记,读了之后有点空虚,感觉不对劲啊,学的东西很难记住,印象不深啊,有种挫败感,作前端的js都学不好怎 ...

  3. 使用js jquery分别获取地址栏参数值

    使用JS获取地址栏参数 方法一: function GetQueryString(name) { var reg = new RegExp("(^|&)"+ name +& ...

  4. JavaScript实现全选和全不选

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  5. Myeclipse 自定义java代码快捷键

    1.首先在MyEclipse菜单栏找到"windows"下拉菜单中找到首选项(英文Prefenerces),弹出首选项界面.   2.打开java -->editor---& ...

  6. 文件系统的几种类型:ext3, swap, RAID, LVM

    分类: 架构设计与优化 1.  ext3 在异常断电或系统崩溃(不洁关机, unclean system shutdown  ).每个已挂载ext2文件系统计算机必须使用e2fsck程序来检查其一致性 ...

  7. 团队作业8——第二次项目冲刺(Beta阶段)--5.26 sixth day

    团队作业8--第二次项目冲刺(Beta阶段)--5.26 sixth day Day six: 会议照片 项目进展 Beta冲刺的第四天,以下是今天具体任务安排: 队员 昨天已完成的任务 今日计划完成 ...

  8. 团队作业8——第二次项目冲刺(Beta阶段)第三天

    BETA阶段冲刺第三天 1.当天站立式会议 2.每个人的工作 (1)昨天已完成的工作: 编写页面讨论 (2)今天计划完成的工作: 完成编写页面 (3)工作中遇到的困难: 验证码正确度 (4)每个人的贡 ...

  9. 201521123027 <java程序设计>第十周学习总结

    1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 异常: 多线程: 2.书面作业 Q1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 ...

  10. 201521123008 《Java程序设计》第十四周学习总结

    1. 本周学习总结 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名) 在自己建立的数据库上执行常见SQL语句(截图) - ...