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的更多相关文章
随机推荐
- VIM纵向编辑【转】
原文:https://www.ibm.com/developerworks/cn/linux/l-cn-vimcolumn/index.html Vim 的纵向编辑模式启动方便,使用灵活,还可以配合上 ...
- Python http.server中获取Post的请求报文
今天在自学http.server请求命令, 各个字段都很好理解, 但唯独想打印获取Post请求报文时, 被难住了, 网上找了很多帖子, 官方的文档也刷了几遍, 但没有一个明确的答复. 后来不经意间看到 ...
- ReLU、LReLU、PReLU、CReLU、ELU、SELU
ReLU.LReLU.PReLU.CReLU.ELU.SELU 2018年01月22日 22:25:34 luxiaohai的学习专栏 阅读数 28218更多 分类专栏: 深度学习 版权声明:本文 ...
- Kirinriki 2017多校
由于每个串的长度为5000,我们去枚举两个自串的对称点(这里注意一下,枚举的时候有两种情况的区间),然后用尺取法爬一遍. ac代码: #include<iostream> #include ...
- spark2.0新特性之DataSet
1.Spark SQL,DataFrame,DataSet的错误类型检测时机 spark SQL:其类型检测与语法检测是在运行时检测的 DataFrame:在spark2.0以前的版本中,DataFr ...
- C++ STL 之 map
#include <iostream> #include <map> using namespace std; // map构造函数 // map<T1, T2> ...
- apache thinkphp5 强制https://访问
根目录下,.htaccess文件 <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On ...
- 我理解的epoll(三)多线程模式下的ET
ET模式下,需要循环从缓存中读取,直到返回EAGAIN没有数据可读后,一个被通知的事件才算结束.如果还读取过程中,同一个连接又有新的事件到来,触发其他线程处理同一个socket,就乱了.EPOLL_O ...
- TCP的keepalive和应用层的heart
从长链接说起 TCP是长链接的,也就是说连接建立后,及时数年没有通信连接仍然存在.这样做的好处是:免去了DNS解析的时间,连接建立等时间,大大加快了请求的速度,同时也有利于接受服务器的实时消息.但前提 ...
- deep_learning_学习资料
TensorFlow的55个经典案例:https://blog.csdn.net/xzy_thu/article/details/76220654 吴恩达机器学习: 1.序列学习:https://mo ...