链接:https://ac.nowcoder.com/acm/contest/371/B
来源:牛客网

小睿睿的n个妹纸排成一排,每个妹纸有一个颜值val[i]。有m个询问,对于每一个询问,小睿睿想知道区间[L,R]颜值最高而编号最小的妹纸是哪一个
对于妹纸们的颜值val[i],其生成函数为:
  1. void generate_array(int n,int seed)
  2. {
  3.     unsigned x = seed;
  4.     for (int i=1;i<=n;++i)
  5.     {
  6.         x ^= x << 13;
  7.         x ^= x >> 17;
  8.         x ^= x << 5;
  9.         val[i]=x%100;
  10.     }
  11. }
对于每一组询问,区间[L,R]的生成函数为:
  1. void generate_ask(int n,int m,int seedx,int seedy)
  2. {
  3.     unsigned x=seedx,y=seedy;
  4.     for (int i=1;i<=m;++i)
  5.     {
  6.         x ^= x << 13;
  7.         x ^= x >> 17;
  8.         x ^= x << 5;
  9.         y ^= y << 13;
  10.         y ^= y >> 17;
  11.         y ^= y << 5;
  12.         L=(x^lastans)%n+1,R=(y^lastans)%n+1;
  13.         if (L>R)swap(L,R);
  14. //解决询问
  15.     }
  16. }

其中lastans为上个询问的答案,对于第一个询问,lastans为0

输入描述:

  1. 12个整数n,m,分别表示序列长度和询问次数
  2.  
  3. 23个整数seed,seedx,seedy,意义如题所示

输出描述:

  1. 一行一个整数,表示所有询问的答案的异或和
示例1

输入

  1. 10 5
  2. 3 5 7

输出

  1. 2
  2.  
  3. 思路:裸的ST
  1. #include <cstdio>
  2. #include <map>
  3. #include <iostream>
  4. #include<cstring>
  5. #include<bits/stdc++.h>
  6. #define ll long long int
  7. #define M 6
  8. using namespace std;
  9. inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
  10. inline ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
  11. int moth[]={,,,,,,,,,,,,};
  12. int dir[][]={, ,, ,-, ,,-};
  13. int dirs[][]={, ,, ,-, ,,-, -,- ,-, ,,- ,,};
  14. const int inf=0x3f3f3f3f;
  15. const ll mod=1e9+;
  16. int val[];
  17. int f[][];
  18. int L,R,lastans,ans;
  19. void generate_array(int n,int seed)
  20. {
  21. unsigned x = seed;
  22. for (int i=;i<=n;++i)
  23. {
  24. x ^= x << ;
  25. x ^= x >> ;
  26. x ^= x << ;
  27. val[i]=x%;
  28. }
  29. }
  30. int maxn(int i,int j){
  31. if(val[i]>val[j]) return i;
  32. else if(val[i]<val[j]) return j;
  33. else return i>j?j:i;
  34. }
  35. void preST(int len){
  36. for(int i=;i<=len;i++) f[i][]=i;
  37. int k=log(len)/log()+;
  38. for(int j=;j<k;j++)
  39. for(int i=;i<=(len-(<<j)+);i++)
  40. f[i][j]=maxn(f[i][j-],f[i+(<<(j-))][j-]);
  41. }
  42. int queryST(int l,int r){
  43. int k=log(r-l+)/log();
  44. return maxn(f[l][k],f[r-(<<k)+][k]);
  45. }
  46. void generate_ask(int n,int m,int seedx,int seedy)
  47. {
  48. unsigned x=seedx,y=seedy;
  49. for (int i=;i<=m;++i)
  50. {
  51. x ^= x << ;
  52. x ^= x >> ;
  53. x ^= x << ;
  54. y ^= y << ;
  55. y ^= y >> ;
  56. y ^= y << ;
  57. L=(x^lastans)%n+,R=(y^lastans)%n+;
  58. if (L>R)swap(L,R);
  59. // cout<<L<<" "<<R<<endl;
  60. lastans=queryST(L,R);
  61. // cout<<lastans<<endl;
  62. ans^=lastans;
  63. }
  64. cout<<ans<<endl;
  65. }
  66. int main(){
  67. ios::sync_with_stdio(false);
  68. int seed,seedx,seedy;
  69. int n,m;
  70. while(cin>>n>>m){
  71. cin>>seed>>seedx>>seedy;
  72. generate_array(n,seed);
  73. lastans=;
  74. int tt=m;
  75. ans=;
  76. preST(n);
  77. generate_ask(n,tt,seedx,seedy);
  78. }
  79. }

牛客OI周赛7-提高组 B小睿睿的询问(ST打表)的更多相关文章

  1. 牛客OI周赛7-提高组 A 小睿睿的等式

    链接:https://ac.nowcoder.com/acm/contest/371/A来源:牛客网 小睿睿在游戏开始时有n根火柴棒,他想知道能摆成形如“A+B=n”的等式且使用的火柴棒数也恰好等于n ...

  2. 牛客OI周赛9-提高组题目记录

    牛客OI周赛9-提高组题目记录 昨天晚上做了这一套比赛,觉得题目质量挺高,而且有一些非常有趣而且非常清奇的脑回路在里边,于是记录在此. T1: 扫雷 题目链接 设 \(f_i\) 表示扫到第 \(i\ ...

  3. 牛客OI周赛8-提高组A-用水填坑

    牛客OI周赛8-提高组A-用水填坑 题目 链接: https://ac.nowcoder.com/acm/contest/403/A 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制: ...

  4. 牛客OI周赛2-提高组

    A.游戏 链接:https://www.nowcoder.com/acm/contest/210/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语 ...

  5. 牛客OI周赛11-普及组 B Game with numbers (数学,预处理真因子)

    链接:https://ac.nowcoder.com/acm/contest/942/B 来源:牛客网 Game with numbers 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C+ ...

  6. 牛客OI周赛7-普及组 解题报告

    出题人好评. 评测机差评. A 救救喵咪 二位偏序.如果数据范围大的话直接树状数组,不过才1000就\(O(n^2)\)暴力就ok了. #include <bits/stdc++.h> s ...

  7. 牛客OI周赛10-普及组-A眼花缭乱的街市-(加速+二分)

    https://ac.nowcoder.com/acm/contest/901/A 很简单的一道题,全场只有20+AC,卡时间.新学了cin加速语法和数组二分查找的函数调用. 知道有个读写挂,可以加速 ...

  8. 牛客OI周赛8-普及组

    https://ac.nowcoder.com/acm/contest/543#question A. 代码: #include <bits/stdc++.h> using namespa ...

  9. 牛客OI周赛7-提高组

    https://ac.nowcoder.com/acm/contest/371#question A.小睿睿的等式 #include <bits/stdc++.h> using names ...

随机推荐

  1. Ubuntu16系统中安装htpasswd

    htpasswd是Apache附带的程序, htpasswd生成包含用户名和密码的文本文件, 每行内容格式为“用户名:密码”, 用于用户文件的基本身份认证. 当用户浏览某些网页的时候, 浏览器会提示输 ...

  2. [编程笔记]第二章 C语言预备知识

    /*第二讲 C语言预备专业知识 1.CPU 内存条 硬盘 显卡 主板 显示器之间的关系 CPU不能直接处理硬盘上的数据 文件存储在硬盘,当运行时,操作系统把硬盘上的数据调用到内存条上. 图像以数据的形 ...

  3. 手机移动端input date placehoder不显示

    要解决这个问题,我们可以伪造一个placehoder,通过css跟js来解决这个问题. 为什么要用js的原因是因为当你选择了时间之后,placehoder的文字没有清除掉,所以我们就需要把这个伪造的p ...

  4. C++常用宏

    宏是由 #define 定义而来,在预处理阶段进行宏展开,它的格式是: #define N 2 + 2 // 仅仅是字符串替换 #define N (2 + 2) // 也是字符串 ,但是是(2 + ...

  5. 字符串正则替换replace第二个参数是函数

    zepto中 //将字符串转成驼峰式的格式 camelize = function (str) { return str.replace(/-+(.)?/g, function (match, chr ...

  6. hadoop的缺点

    Hadoop的限制 Hadoop只能执行批量处理,并且只以顺序方式访问数据.这意味着必须搜索整个数据集,即使是最简单的搜索工作.

  7. dede:field name=’position’标签调用 主页改成英文Home和改变符号

    在用dede:field name=’position’ 这个标签的时候我们调用的这个就是中文的,出现的是主页>+相应的栏目  ,那么这个问题怎么改成英文的呢?有好多大虾都说找到dede安装目录 ...

  8. js对json解析获取对应属性的值,JSON.stringify()和JSON.parse()

    JSON.stringify() 该方法,将一个JSON对象转化为字符串string JSON.parse() 该方法,将一个字符串转化为JSON对象object 对于JSON对象,获取其对应键值 可 ...

  9. 一个实际的案例介绍Spring Boot + Vue 前后端分离

    介绍 最近在工作中做个新项目,后端选用Spring Boot,前端选用Vue技术.众所周知现在开发都是前后端分离,本文就将介绍一种前后端分离方式. 常规的开发方式 采用Spring Boot 开发项目 ...

  10. Lodop提示安装或升级的注意事项

    LODOP的LodopFuncs.js文件里,自动判断浏览器类型提示下载哪个,根据版本号比较判断提示升级.此文章是以前写的,图示可能过旧,新版提示不同,但是LodopFuncs.js里各个方面变动不大 ...