loj541
sol:我标算还没写过,似乎分块就可以过(因为数据是随机的),我写个set可以有70~80分
//C++
#include<bits/stdc++.h> using namespace std; namespace IO
{
int c;
unsigned int seed;
unsigned int randnum()
{
seed^=seed<<;
seed^=seed>>;
seed^=seed<<;
return seed;
} inline int read(int &x)
{
scanf("%d",&x);
return x;
}
inline void init_case(int &m,int &a,int &b,int &d,int p[])
{
scanf("%d%u%d%d%d%d",&m,&seed,&a,&b,&c,&d);
for(int i=; i<=m; i++)
{
if(randnum()%c==)p[i]=-;
else p[i]=randnum()%b;
}
} inline void update_ans(unsigned int &ans_sum,unsigned int cur_ans,int no)
{
// cout << no << ' ' << cur_ans << endl;
const static unsigned int mod=;
ans_sum^=(long long)no*(no+)%mod*cur_ans%mod;
}
}
using IO::read;
using IO::init_case;
using IO::update_ans;
/*
Ò»¿ªÊ¼Çëµ÷ÓÃread(T)¶ÁÈëÊý¾Ý×éÊýT
½ÓÏÂÀ´Ã¿×éÊý¾Ý¿ªÊ¼Ê±Çëµ÷ÓÃinit_case(m,a,b,d,p)¶ÁÈëm,a,b,d,p[]
ÿ×éÊý¾Ý¿ªÊ¼Ê±ÇëÓÃÒ»¸ö³õʼ»¯Îª0µÄ32λÎÞ·ûºÅÕûÐαäÁ¿ans_sum´æ´¢´ð°¸£¬È»ºó¶ÔÓÚÿ¸öi£¬
ÓÃ32λÎÞ·ûºÅÕûÐαäÁ¿cur_ans´æ´¢µÚi´Î´ð°¸£¬²¢µ÷ÓÃupdate_ans(ans_sum,cur_ans,i)¸üС£×îºóÊä³öans_sum¼´¿É¡£
*/ //ʾÀý´úÂ룺
const int N=;
int m,a,b,d;
int p[N];
bool Bo[N];
bool Used[N];
deque<int>dq;
set<int>mex;
set<int>::iterator it;
unsigned int ans_sum=,cur_ans=; inline void setSolve(int i)
{
if((p[i]==-)&&d)
{
if(dq.empty()) return;
int tmp=dq.front(); dq.pop_front(); Bo[tmp]=;
mex.erase(tmp);
// it=mex.lower_bound(tmp); mex.erase(it);
}
else if((Bo[p[i]])&&d)
{
dq.push_back(p[i]); Bo[p[i]]=;
mex.insert(p[i]);
}
else if((!Bo[p[i]])&&(!Used[p[i]]))
{
Used[p[i]]=; Bo[p[i]]=;
mex.erase(p[i]);
// it=mex.lower_bound(p[i]); mex.erase(it);
}
else if(d)
{
if(dq.empty()) return;
int tmp=dq.front(); dq.pop_front(); Bo[tmp]=;
mex.erase(tmp);
// it=mex.lower_bound(tmp); mex.erase(it);
}
cur_ans=*mex.begin();
update_ans(ans_sum,cur_ans,i);
}
inline void playset()
{
int i;
for(i=;i<=a;i++) Bo[i]=Used[i]=;
mex.clear(); for(i=a+;i<=max(b,a+);i++) Bo[i]=Used[i]=,mex.insert(i);
dq.clear();
for(i=;i+<=m;i+=)
{
setSolve(i); setSolve(i+); setSolve(i+); setSolve(i+); setSolve(i+);
setSolve(i+); setSolve(i+); setSolve(i+); setSolve(i+); setSolve(i+);
}
for(;i<=m;i++) setSolve(i);
printf("%u\n",ans_sum);
}
int main()
{
freopen("mex.in","r",stdin);
freopen("mex.out","w",stdout);
int T,i;
read(T);
while(T--)
{
ans_sum=cur_ans=;
init_case(m,a,b,d,p); d^=;
playset();
}
return ;
}
/*
input
1
100000 866153523 100000 10 2 0
output
892635735
*/
set
loj541的更多相关文章
随机推荐
- Python何时执行装饰器
装饰器的一个关键特性是,它们在被装饰的函数定义之后立即运行.这 通常是在导入时(即 Python 加载模块时),如示例 7-2 中的 registration.py 模块所示. 示例 7-2 regi ...
- shell习题第12题:批量创建用户
[题目要求] 用shell脚本实现如下需求 添加user_00 -- user_09 10个用户,并且给他们设置一个随机密码,密码要求10位包含大小写字母及数字,注意要把每个用户的密码记录到一个日志文 ...
- Idea加载项目扫描完毕后自动退出
问题描述:Idea平时好好的,突然就打开后扫描完毕后自动退出.网上说修改idea.exe.vmoptions文件的Xmx,还是不行. 后来根据http://www.pianshen.com/artic ...
- 前端必学TypeScript之第一弹,st基础类型!
TypeScript 是微软开发的 JavaScript 的超集,TypeScript兼容JavaScript,可以载入JavaScript代码然后运行.TypeScript与JavaScript相比 ...
- asp.net mvc4 学习1
1 简介:微软在很早就看到了基于windows系统的web开发平台的需求,这时便开始提出自己的解决方案即微软的第一个基于web开发的平台ASP.再后来随着需求和性能的要求再2002年推出第二个解决方案 ...
- gulp die('click').live('click' composer
gulp die('click').live('click' composer packagist.org https://getcomposer.org/ 下载后 php composer.pha ...
- java 日期。时间
友情链接: https://www.cnblogs.com/wanson/articles/10818955.html
- CAFFE(FAQ.1):Ubuntu 配置caffe 框架之数据库读取错误:ImportError: No module named lmdb解决办法
Z: 在安装了caffe框架后需要读取大量的数据进行学习训练.比如在MNIST识别训练中,一般直接读图片会比较耗时,我们一般将图片转存为数据库中.目前主流的数据库有以下两种选择: LevelDB Lm ...
- Linux磁盘及文件系统管理1
RHCSA认证中的东西: Linux系统管理包括的内容有: 磁盘分区及文件系统管理 RAID LVM 网络属性管理 程序包管理 sed and awk 进程查看和管理 内核管理(编译和安装) 系统启动 ...
- mongo批量写入es
import pymongo import math from elasticsearch import Elasticsearch from elasticsearch import helpers ...