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的更多相关文章
随机推荐
- nginx浏览器开启密码验证
如果我们在 nginx 下搭建了一些站点,但是由于站点内容或者流量的关系,我们并不想让所有人都能正常访问,那么我们可以设置访问认证.只有让用户输入正确的用户名和密码才能正常访问.效果如下: 在 ngi ...
- MySQL - 性能优化 & MySQL常见SQL错误用法(转载)
1. LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方.比如: , ; 一般DBA想到的办法是在type, name, create_time字段上加组合索引.这样条件排序 ...
- LeetCode 866. Prime Palindrome
866. Prime Palindrome(回文素数) 题目: 求出大于或等于 N 的最小回文素数. 回顾一下,如果一个数大于 1,且其因数只有 1 和它自身,那么这个数是素数. 例如,2,3,5,7 ...
- ADO.NET连接数据库增删查改创建公用类
顺序如下:再web.config中添加数据库的用户名和密码 创建公用类. //添加进web.config中的账号和密码 /*<connectionStrings> <add name ...
- service程序改为windows窗体展示
首先将exe程序文件进行快捷创建.然后就会生成一个 exe -shortCut 程序,然后进入属性中,并且进行修改引用路径,在路径xx.exe 后面加一个空格和/tt,保存,这样就可以正常运行了. 如 ...
- 9. Java分支语句之if...else
if...else条件语句 一个if语句包含一个布尔表达式和一条或者多条语句. 语法运用有三种 //第一种 if(布尔表达式){ //如果布尔表达式为true将执行的语句 } //第二种 if(布尔表 ...
- HTML中由于DIV(块元素)浮动,导致的父元素高度塌陷问题的解决方案
费话不多说,直接上问题: 1.开始时,页面只有两个DIV的嵌套(见图) 运行结果是: 现在看运行的是正常的,但是当我设置让 class="box2" 的DIV浮动时 运行结果是这样 ...
- webapi 之 post参数传递
最近在写webapi,在写post请求接口时遇到了不少的问题,在此记录下来. post请求的参数和get请求有点不一样,我们知道get请求的参数是通过url来传递的,而post请求则是通过http的请 ...
- nodejs request module里的json参数的一个坑
今天工作的时候遇到一个坑,在客户端用nodejs给服务器发送HTTP请求,服务器老是报错:In the context of Data Services an unknown internal ser ...
- 1.SpringMVC 概述
SpringMVC 简介 SpringMVC 也叫 Spring web mvc ,属于表现层的框架.SpringMVC 是 Spring框架的一部分,是在Spring3.0后发布的 第一个Sprin ...