1495 中国好区间

基准时间限制:0.7 秒 空间限制:131072 KB 分值: 80 难度:5级算法题
 

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

由于阿尔法的序列长度实在是太大了,无法在规定时间内读入。

他想了一个绝妙的方法。

读入a[0],b,c,p,则a[i]=(a[i-1]*b+c)mod p。

样例解释:

a1~a5分别为47,135,247,35,147

对应的7个区间分别为[1,3],[2,3],[1,4],[2,4],[1,5],[2,5],[3,5]

 
对于重复的数字1,2,2 第一大是2,第二大也是2,第三大是1。
Input
  1. 读入一行,7个数字,表示n(n<=10000000),k(k<=n),T,a[0],b,c,p
  2. 所有数字均为正整数且小于等于10^9
Output
  1. 输出一行表示好区间的个数。
Input示例
  1. 5 2 100 10 124 7 300
Output示例
  1. 7
  1. /*
  2. 51 nod 1495 中国好区间
  3.  
  4. problem:
  5. 给你一个公式递推出a[i],问有多少个区间它们的第k大数≥T
  6.  
  7. solve:
  8. 枚举每个点作为它的右端点r,找到最靠右的点l使[l,r]间≥T的数有k个. 那个这个r能贡献的区间
  9. 个数就是l.
  10.  
  11. hhh-2016/10/01-20:55:47
  12. */
  13. #pragma comment(linker,"/STACK:124000000,124000000")
  14. #include <algorithm>
  15. #include <iostream>
  16. #include <cstdlib>
  17. #include <cstdio>
  18. #include <cstring>
  19. #include <vector>
  20. #include <map>
  21. #include <queue>
  22. #include <functional>
  23. #include <math.h>
  24. #define lson i<<1
  25. #define rson i<<1|1
  26. #define ll long long
  27. #define clr(a,b) memset(a,b,sizeof(a))
  28. #define key_val ch[ch[root][1]][0]
  29. using namespace std;
  30. const int maxn = 1e7 + 1000;
  31. const int inf = 0x3f3f3f3f;
  32. const ll mod = 1000000007;
  33. const double eps = 1e-7;
  34. template<class T> void read(T&num)
  35. {
  36. char CH;
  37. bool F=false;
  38. for(CH=getchar(); CH<'0'||CH>'9'; F= CH=='-',CH=getchar());
  39. for(num=0; CH>='0'&&CH<='9'; num=num*10+CH-'0',CH=getchar());
  40. F && (num=-num);
  41. }
  42. int stk[70], tp;
  43. template<class T> inline void print(T p)
  44. {
  45. if(!p)
  46. {
  47. puts("0");
  48. return;
  49. }
  50. while(p) stk[++ tp] = p%10, p/=10;
  51. while(tp) putchar(stk[tp--] + '0');
  52. putchar('\n');
  53. }
  54.  
  55. int n,k;
  56. ll T,a,b,c,p;
  57. int ta[maxn];
  58. int pos[maxn];
  59. int main()
  60. {
  61. read(n),read(k),read(T);
  62. read(a),read(b),read(c),read(p);
  63. ta[0] = 0;
  64. memset(pos,0,sizeof(pos));
  65. for(int i = 1; i <= n; i++)
  66. {
  67. ta[i] = ta[i-1];
  68. ll t = (a * b + c ) % p;
  69. if(t >= T)
  70. ta[i] ++ ;
  71. if(!pos[ta[i]] && ta[i])
  72. pos[ta[i]] = i;
  73. a = t;
  74. }
  75. int tpos = k;
  76. while(ta[tpos] < k)
  77. tpos ++ ;
  78. ll ans = 0;
  79. for(int i = tpos;i <= n;i++)
  80. {
  81. int p = pos[ta[i] - k + 1];
  82. ans += p;
  83. }
  84. printf("%I64d\n",ans);
  85. }

  

51 nod 1495 中国好区间的更多相关文章

  1. 51 nod 1495 中国好区间 奇葩卡时间题 700ms 卡O(n*log(n)), 思路:O(n)尺取法

    题目: 这个题目竟然叫中国好区间,要不要脸.欸,不得不说还蛮顺口的,哈哈哈. 首先我们有一个数组a.可以递推得来,O(n)时间复杂度. 定义left(有效区间的左端点),bigger(有效区间中大于等 ...

  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. 51 nod 1766 树上的最远点对(线段树+lca)

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

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

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

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

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

  8. 51 nod 1055 最长等差数列(dp)

    1055 最长等差数列 基准时间限制:2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题 N个不同的正整数,找出由这些数组成的最长的等差数列.     例如:1 3 5 6 8 9 ...

  9. 51 nod 1421 最大MOD值

    1421 最大MOD值 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 有一个a数组,里面有n个整数.现在要从中找到两个数字(可以 ...

随机推荐

  1. Alpha冲刺Day6

    Alpha冲刺Day6 一:站立式会议 今日安排: 由张梨贤继续完成前一天委托第三方剩余的内容,并完成委托情况查看这一子模块 由黄腾飞继续完成前一天企业自查风险管理剩余的内容,并完成风险上报这一子模块 ...

  2. PYTHON 词云

    #!/usr/bin/env python # -*- coding:utf-8 -*- import matplotlib.pyplot as plt from wordcloud import W ...

  3. MongoDB 副本集管理

    一.以单机模式启动成员节点 有时候出于维护的需要,需要以单机模式启动某个节点而不是一个副本集成员身份. 1).首先查询服务器命令行参数 db.serverCmdLineOpts() 2).关闭当前副本 ...

  4. JAVAEE——BOS物流项目09:业务受理需求分析、创建表、实现自动分单、数据表格编辑功能使用方法和工作单快速录入

    1 学习计划 1.业务受理需求分析 n 业务通知单 n 工单 n 工作单 2.创建业务受理环节的数据表 n 业务通知单 n 工单 n 工作单 3.实现业务受理自动分单 n 在CRM服务端扩展方法根据手 ...

  5. JAVA_SE基础——46.引用数据类型变量.值交换[独家深入解析]

    需求:定义一个函数交换数组中两个元素的位置. code 1: import java.util.*; class Demo3 { public static void main(String[] ar ...

  6. LeetCode & Q26-Remove Duplicates from Sorted Array-Easy

    Descriptions: Given a sorted array, remove the duplicates in place such that each element appear onl ...

  7. Mego(04) - Mego入门

    本教程演示创建一个简单的数据库访问及更新数据的示例以便于初步了解下Mego框架的使用. 文中使用Visual Studio 2017版本. 创建Visual Studio项目 创建一个名为 MegoS ...

  8. Java KeyTool command

    Create a new key: keytool -genkey -alias keyAlias -keyalg RSA  -validity 1000 -keystore d:\keyPath\k ...

  9. restful架构风格设计准则(六)版本管理

    读书笔记,原文链接:http://www.cnblogs.com/loveis715/p/4669091.html,感谢作者! 版本管理 在前面已经提到过,一个REST系统为资源所抽象出的URI实际上 ...

  10. SpringMvc采用 http+json 实现前后端交互

    演示列表 报文表示 一.Json请求和Json响应 实现:Spring4.1.1.RELEASE + jackson2.4.4+JQuery1.10.2 1.pom.xml <propertie ...