降智好题

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

#include<iostream>
#include<cstdio>
using namespace std;
const int N=5005;
int n,m,q,len,p[N*N],id[N*N],l[N],r[N];
long long x,a,b,c,d;
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
int main()
{
x=read(),a=read(),b=read(),c=read(),d=read(),n=read(),m=read(),q=read(),len=n*m;
for(int i=0;i<len;i++)
p[i]=i;
for(int i=0;i<len;i++)
x=(a*x%d*x+b*x+c)%d,swap(p[i],p[x%(i+1)]);
while(q--)
{
int x=read(),y=read();
swap(p[x-1],p[y-1]);
}
for(int i=0;i<len;i++)
id[p[i]]=i;
for(int i=0;i<m;i++)
l[i]=0,r[i]=n-1;
for(int i=0;i<len;i++)
if(l[id[i]%m]<=id[i]/m&&r[id[i]%m]>=id[i]/m)
{
printf("%d ",i+1);
for(int j=id[i]%m+1;j<m;j++)
l[j]=max(l[j],id[i]/m);
for(int j=0;j<id[i]%m;j++)
r[j]=min(r[j],id[i]/m);
}
return 0;
}

最新文章

  1. 初识npm
  2. GIS规划应用——基于哈夫模型的GIS服务区分析
  3. ZeroMQ接口函数之 :zmq_plain - 明文认证
  4. C#如何通过Socket的方式获取httponly cookie
  5. jQuery_04之第三方、自定义
  6. Session丢失的解决办法小结
  7. [moka同学笔记]百度编辑器Ueditor自动换行,添加&lt;p&gt;的问题(摘录)
  8. 关于遍历javascript 中的json串浏览器输出的结果不统一的情况
  9. display:inline-block的空白bug问题
  10. 关于JS的一点summary
  11. 数据库sql整体整理
  12. commoncrawl 源码库是用于 Hadoop 的自定义 InputFormat 配送实现
  13. JarSearch
  14. C11 constant expressions 常量表达式
  15. Redis linux 外部telnet访问不通
  16. fildder
  17. hive表链接
  18. SAP PA认证
  19. 2019年学Java开发有优势吗?
  20. Innodb的体系结构

热门文章

  1. java集合讲解干货集
  2. 剑指Offer:把数组排成最小的数【45】
  3. JS 中的面向对象
  4. Android中m、mm、mmm、mma、mmma的区别
  5. 可信执行环境(TEE)介绍 与应用
  6. 《CSS权威指南(第三版)》---第四章 值和单位
  7. BZOJ 1607 [Usaco2008 Dec]Patting Heads 轻拍牛头:统计 + 筛法【调和级数】
  8. not in和not exist的区别(转)
  9. jQuery圆形统计图(百分比)转 作者:月光光
  10. jsp基本概念