「LibreOJ NOIP Round #1」七曜圣贤
题目啰嗦:
支持三个操作:
不可重复集合:
1.加入一个数
2.删除一个数
3.恢复目前最早的一次删除的数
操作可能不合法,每次有效操作之后求集合的mex(最小没有出现过的数)
50组数据+1e6,必须O(N)
维护删除、恢复的数的操作可以队列维护。
数有没有在集合里可以全局bool数组记录
加入删除一个数,mex怎么维护?
考虑化简问题:
只插入?
直接mex往上走到第一个没有出现的数即可。单增,O(N)
有删除?
如果删除小的一个数,mex要跳下来,然后再恢复这个删除的数,mex又得一步一步走上去。
能不能不跳?
可以!
只要知道当前删除的数最小的一个,和mex取min即可。
维护删除的数的集合:
插入一个数,删除一个数,维护最小的数。怎么看也得带logn
但是,发现恢复数是按照时间顺序从小到大
所以一个数如果比后面的数大,那么直到这个删除的数被恢复也不可能成为最小值。
单调队列维护。
- #include<bits/stdc++.h>
- #define reg register int
- #define il inline
- #define numb (ch^'0')
- using namespace std;
- typedef long long ll;
- il void rd(int &x){
- char ch;x=;bool fl=false;
- while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
- for(x=numb;isdigit(ch=getchar());x=x*+numb);
- (fl==true)&&(x=-x);
- }
- namespace Miracle{
- const int N=1e6+;
- const int mod=;
- int ans[N];
- int q[*N],l,r;
- queue<int>que;
- int p[N];
- bool on[*N],has[*N];
- 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){
- 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;
- void clear(){
- memset(on,,sizeof on);
- memset(q,,sizeof q);
- l=,r=;
- memset(has,,sizeof has);
- while(!que.empty()) que.pop();
- }
- int get(){
- while(l<=r&&on[q[l]]) ++l;
- if(l<=r) return q[l];
- return 0x3f3f3f3f;
- }
- void upda(int c){
- while(l<=r&&q[r]>=c) --r;
- q[++r]=c;
- }
- int main(){
- int T;read(T);
- int m,a,b,d;
- while(T--){
- clear();
- init_case(m,a,b,d,p);
- for(reg i=;i<=a;++i) on[i]=,has[i]=;
- int mex=a+;
- for(reg i=;i<=m;++i){
- int k;
- if(p[i]==-){//case 3
- if(que.empty()||d){
- ans[i]=;goto end;
- }else{
- k=que.front();que.pop();
- on[k]=;
- }
- }else{
- if(!on[p[i]]&&!has[p[i]]){
- has[p[i]]=;
- on[p[i]]=;
- }else if(on[p[i]]){
- if(d==){
- ans[i]=;goto end;
- }else{
- que.push(p[i]);
- on[p[i]]=;
- upda(p[i]);
- }
- }else{
- if(que.empty()||d){
- ans[i]=;goto end;
- }else{
- k=que.front();que.pop();
- on[k]=;
- }
- }
- }
- while(on[mex]) ++mex;
- ans[i]=min(mex,get());
- end:;
- }
- ll op=;
- for(reg i=;i<=m;++i){
- op^=(ll)ans[i]*((ll)i*i%mod+*i%mod)%mod;
- }
- printf("%lld\n",op);
- }
- return ;
- }
- }
- signed main(){
- Miracle::main();
- return ;
- }
- /*
- Author: *Miracle*
- Date: 2018/12/31 16:28:17
- */
「LibreOJ NOIP Round #1」七曜圣贤的更多相关文章
- LibreOJ #541. 「LibreOJ NOIP Round #1」七曜圣贤(单调队列)
被以前自己瞎YY的东西坑了T T...单调队列的确是可以维护这种操作的.... 显然这题可以转化成维护不在车上的东西的最小值, 支持插入和删去最早出现的值,然后就可以用单调队列了T T #includ ...
- 【LibreOJ】#541. 「LibreOJ NOIP Round #1」七曜圣贤
[题意]一开始车上有编号为0~a的红茶,过程中出现的红茶编号仅有[0,b),有三种操作: 1.买进编号未在车上出现过的红茶. 2.丢掉车上指定编号的红茶. 3.将最早丢出去的红茶捡回来. 每次操作后求 ...
- LOJ#541. 「LibreOJ NOIP Round #1」七曜圣贤
有一辆车一开始装了编号0-a的奶茶,现有m次操作,每次操作Pi在[-1,b),若Pi为一个未出现过编号的奶茶,就把他买了并装上车:若Pi为一个在车上的奶茶,则把他丢下车:否则,此次操作为捡起最早丢下去 ...
- 「LOJ 541」「LibreOJ NOIP Round #1」七曜圣贤
description 题面很长,这里给出题目链接 solution 用队列维护扔掉的红茶,同时若后扔出的红茶比先扔出的红茶编号更小,那么先扔出的红茶不可能成为答案,所以可以用单调队列维护 故每次询问 ...
- 【LibreOJ】#538. 「LibreOJ NOIP Round #1」数列递推
[题意]LibreOJ [算法]乱搞 [题解]容易发现数列最后一定单调,最后单调递增则最大值赋为最后一个,反之最小值赋为最后一个,然后处理一些细节就可以AC,要注意以下几点: 1.数列连续三项以及数列 ...
- 题解【loj537】「LibreOJ NOIP Round #1」DNA 序列
题目描述 \(NOIP\)复赛之前\(HSD\)桑进行了一项研究,发现人某条染色体上的一段\(DNA\)序列中连续的\(k\)个碱基组成的碱基序列与做题的 \(AC\) 率有关!于是他想研究一下这种关 ...
- 「LOJ 537」「LibreOJ NOIP Round #1」DNA 序列
description NOIP 复赛之前,HSD 桑进行了一项研究,发现人某条染色体上的一段 DNA 序列中连续的\(k\)个碱基组成的碱基序列与做题的 AC 率有关!于是他想研究一下这种关系. 现 ...
- 「LibreOJ NOIP Round #1」旅游路线
Description T 城是一个旅游城市,具有 nnn 个景点和 mmm 条道路,所有景点编号为 1,2,...,n1,2,...,n1,2,...,n.每条道路连接这 nnn 个景区中的某两个景 ...
- LibreOJ #539. 「LibreOJ NOIP Round #1」旅游路线(倍增+二分)
哎一开始看错题了啊T T...最近状态一直不对...最近很多傻逼题都不会写了T T 考虑距离较大肯定不能塞进状态...钱数<=n^2能够承受, 油量再塞就不行了...显然可以预处理出点i到j走c ...
随机推荐
- 怎样下载Firefox与Chrome浏览器驱动
在浏览器地址栏输入https://www.seleniumhq.org/ 打开Selenium官网 下载Firefox浏览器驱动 解压到本地 下载Chrome浏览器驱动 解压到本地 把这2个驱动放到P ...
- Jmeter登录接口返回 status415
1.现象:在查看结果树中看到: Request Headers:Connection: keep-aliveContent-Type: application/x-www-form-urlencode ...
- 第五模块·WEB开发基础-第2章JavaScript基础
第1章 JavaScript基础 01-JavaScript历史介绍 02-JavaScript的组成 03-JavaScript的引入方式 04-变量的使用 05-基本数据类型(一) 06-基本数据 ...
- 阿里云ECS下CentOS7.4 yum安装Python3.6环境
一.安装EPEL和IUS软件源 二.安装Python3.6 三.创建python3软链接连接符 四.安装pip3 五.创建pip3链接符 六.进行验证是否安装成功 一.安装EPEL和IUS软件源 yu ...
- Python零基础入门必知
Python自学知识点总结 //2018.10.09 1. Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido ...
- 【转】UTF8字符串转换为汉字 c#,转自游戏开发主席
using System; /// <summary> /// UTF8字符串转换为汉字用的类 /// 转换如"\\u8d35"之类的字符串为对应的汉字 /// < ...
- Solium代码测试框架
Solium, 在solid中,Linter用于标识和修复样式&安全问题 //调用测试 solium -d contracts --fix 源代码名称:Solium 源代码网址:http:// ...
- Hadoop源码解析 1 --- Hadoop工程包架构解析
1 Hadoop中各工程包依赖简述 Google的核心竞争技术是它的计算平台.Google的大牛们用了下面5篇文章,介绍了它们的计算设施. GoogleCluster: http:// ...
- 七:Web Application Proxy
yarn自带了web接口,默认是和RM一起的(8088端口).但是为了减少从web接口受到的攻击,可以把Web接口单独放在别的机器上. 设置下web代理就行了 Configurations Confi ...
- jquery delayLoading.js插件的延迟加载效果和图片延迟加载
1.首页给大家介绍一下这款插件的主要用途 主要应用于图片的延迟加载,而且可以变换不同的延迟加载效果,适合相册图片.有做相册的可以考虑应用. 2.兼容IE7以上都兼容,其他的浏览器也兼容.所以说兼容性还 ...