题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3671

设 x 为一个点的行号, y 为一个点的列号;原本想着判断一个点能不能选就是看选了的点中 x<cr.x 的 y 的最大值和 x>cr.x 的 y 的最小值,所以想用树状数组维护。

但这样时间空间都会爆。

应该发现“选”一个数最多出现 n+m-1 次!所以考虑 O(1) 判断,在选了一个数之后多花时间维护。

那么可以维护每行能选的列的范围。这个范围一定是一个区间。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #define ll long long
  5. using namespace std;
  6. const int N=;
  7. int n,m,lm,Q;
  8. int x[N*N],a[N*N],l[N],r[N];
  9. int rdn()
  10. {
  11. int ret=;bool fx=;char ch=getchar();
  12. while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
  13. while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
  14. return fx?ret:-ret;
  15. }
  16. int Mn(int a,int b){return a<b?a:b;}
  17. int Mx(int a,int b){return a>b?a:b;}
  18. void init()
  19. {
  20. int a,b,c,d;
  21. x[]=rdn();a=rdn();b=rdn();c=rdn();d=rdn();
  22. n=rdn();m=rdn();Q=rdn();
  23. lm=n*m;
  24. for(int i=;i<=lm;i++)
  25. x[i]=((ll)a*x[i-]*x[i-]+(ll)b*x[i-]+c)%d;
  26. }
  27. int main()
  28. {
  29. init();
  30. for(int i=;i<=lm;i++)a[i]=i;
  31. for(int i=;i<=lm;i++)swap(a[i],a[x[i]%i+]);
  32. for(int i=,u,v;i<=Q;i++)
  33. {
  34. u=rdn();v=rdn();swap(a[u],a[v]);
  35. }
  36. for(int i=;i<=lm;i++)x[a[i]]=i;
  37. for(int i=;i<=n;i++)l[i]=;for(int i=;i<=n;i++)r[i]=m;
  38. for(int i=,cnt=,sm=n+m-;i<=lm;i++)
  39. {
  40. int X=(x[i]-)/m+,Y=(x[i]-)%m+;
  41. if(Y>r[X]||Y<l[X])continue;
  42. printf("%d ",i);cnt++;
  43. if(cnt==lm)break;
  44. for(int j=;j<X;j++)r[j]=Mn(r[j],Y);
  45. for(int j=X+;j<=n;j++)l[j]=Mx(l[j],Y);
  46. }
  47. puts("");return ;
  48. }

bzoj 3671 [Noi2014]随机数生成器——贪心(时间复杂度分配)的更多相关文章

  1. bzoj 3671: [Noi2014]随机数生成器【模拟+贪心】

    降智好题 前面随机部分按照题意模拟,然后字典序贪心,也就是记录每个值的位置从1~nm依次看能不能取,能取的话更新行的取值范围(它上面的行一定取的列小于等于这个数取的列,下面行大于等于) #includ ...

  2. BZOJ 3671 NOI2014 随机数生成器

    这题其实是个暴力. 首先那一堆如何构造n*m方格的东西都是在玩你. 构造出来方阵后,由于是一个排列,不存在重复,可以大力贪心. 每次将选出一个最小的元素,然后将它右上左下的元素全部打上标记(记得bre ...

  3. luogu P2354 [NOI2014]随机数生成器 贪心 卡空间 暴力

    LINK:随机数生成器 观察数据范围还是可以把矩阵给生成出来的. 考虑如何求出答案.题目要求把选出的数字从小到大排序后字典序尽可能的小 实际上这个类似于Mex的问题. 所以要从大到小选数字 考虑选择一 ...

  4. 【bzoj3671】[Noi2014]随机数生成器 贪心

    题目描述 输入 第1行包含5个整数,依次为 x_0,a,b,c,d ,描述小H采用的随机数生成算法所需的随机种子.第2行包含三个整数 N,M,Q ,表示小H希望生成一个1到 N×M 的排列来填入她 N ...

  5. BZOJ3671: [Noi2014]随机数生成器(贪心)

    Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 2098  Solved: 946[Submit][Status][Discuss] Descripti ...

  6. [bzoj3671][Noi2014][随机数生成器] (贪心+位运算+卡空间)

    Description Input 第1行包含5个整数,依次为 x_0,a,b,c,d ,描述小H采用的随机数生成算法所需的随机种子.第2行包含三个整数 N,M,Q ,表示小H希望生成一个1到 N×M ...

  7. [luogu] P2354 [NOI2014]随机数生成器 (贪心)

    Description Input 第1行包含5个整数,依次为 x_0,a,b,c,d ,描述小H采用的随机数生成算法所需的随机种子.第2行包含三个整数 N,M,Q ,表示小H希望生成一个1到 N×M ...

  8. BZOJ_3671_[Noi2014]随机数生成器_set+贪心

    BZOJ_3671_[Noi2014]随机数生成器_set Description   Input 第1行包含5个整数,依次为 x_0,a,b,c,d ,描述小H采用的随机数生成算法所需的随机种子.第 ...

  9. [BZOJ3671][UOJ#6][NOI2014]随机数生成器

    [BZOJ3671][UOJ#6][NOI2014]随机数生成器 试题描述 小H最近在研究随机算法.随机算法往往需要通过调用随机数生成函数(例如Pascal中的random和C/C++中的rand)来 ...

随机推荐

  1. Intellij IDEA的一些操作小技巧

    1.Presentation Mode 我们可以使用 Presentation Mode,将IDEA弄到最大,可以让你只关注一个类里面的代码,进行毫无干扰的 coding.可以使用Alt+v快捷键,弹 ...

  2. SPOJ-394-ACODE - Alphacode / dp

    ACODE - Alphacode #dynamic-programming Alice and Bob need to send secret messages to each other and ...

  3. linux-git shell colors

    git config --global color.status auto git config --global color.diff auto git config --global color. ...

  4. EasyUI validType属性

    /** * 包含easyui的扩展和常用的方法 * * @author * * @version 20120806 */ var wjc = $.extend({}, wjc);/* 定义全局对象,类 ...

  5. hdu 5802 Windows 10 (dfs)

    Windows 10 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  6. Alpha冲刺一(1/10)

    前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/9948330.html 作业博客:https://edu.cnblogs.com/campus/ ...

  7. 有关php的session

    From:http://blog.csdn.net/sayigood/article/details/4850480 php中session的用法 PHP中的session默认情况下是使用客户端的Co ...

  8. Kotlin Reference (七) Returns and Jumps

    most from reference kotlin有三个结构跳跃表达式 return 默认情况下,从最近的封闭函数或匿名函数返回. break 跳出整个循环 continue 跳出本次循环,进行下一 ...

  9. Leetcode 894. All Possible Full Binary Trees

    递归 # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # ...

  10. python学习之多线程(二)

    使用multiprocessing 使用multiprocessing.dummy 单使用multiprocessing模块的指的是多进程,使用multiprocessing.dummy则表示使用的是 ...