链接: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. StackWalk64

    #include <Windows.h>   #define  PULONG_PTR ULONG** #define  PULONG ULONG* #define  ULONG_PTR U ...

  2. [转帖]SAP一句话入门:Sales and Distribution

    SAP一句话入门:Sales and Distribution http://blog.vsharing.com/MilesForce/A616565.html SD是Sales and Distri ...

  3. [转帖]tar高级教程:增量备份、定时备份、网络备份

    tar高级教程:增量备份.定时备份.网络备份 作者: lesca 分类: Tutorials, Ubuntu 发布时间: 2012-03-01 11:42 ė浏览 27,065 次 61条评论 一.概 ...

  4. day 7-7 线程池与进程池

    一. 进程池与线程池 在刚开始学多进程或多线程时,我们迫不及待地基于多进程或多线程实现并发的套接字通信,然而这种实现方式的致命缺陷是:服务的开启的进程数或线程数都会随着并发的客户端数目地增多而增多,这 ...

  5. C# Note26: [MethodImpl(MethodImplOptions.Synchronized)]与lock机制

    在进行.NET开发时,经常会遇见如何保持线程同步的情况.在众多的线程同步的可选方式中,加锁无疑是最为常用的.如果仅仅是基于方法级别的线程同步,使用System.Runtime.CompilerServ ...

  6. 原 线程池中shutdown()和shutdownNow()方法的区别

    参考:shutdown和shutdownNow的区别 shutDown() 当线程池调用该方法时,线程池的状态则立刻变成SHUTDOWN状态.此时,则不能再往线程池中添加任何任务,否则将会抛出Reje ...

  7. Front-end Job Interview Questions

    Front-end Job Interview Questions 前端面试 https://github.com/h5bp/Front-end-Developer-Interview-Questio ...

  8. $.ajax的async设置true和false的区别一点笔记

    async的默认值是true 当async为true时,为异步请求 如果一个$.ajax的函数在另一个函数中调用,不一定会等该函数调用完再加载完函数 导致产生空值的问题 而在JS函数中调用$.ajax ...

  9. docker 列出每个容器的IP

    抄来的...找不到出处了.   常用方法有两种 docker inspect 容器ID | grep IPAddress 方法二 查看docker name: sudo docker inspect ...

  10. 三、zookeeper安装

    一.简介 二.下载解压: #wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar ...