题目传送门

题目大意: 有 b b b 种红茶,一开始有 0 0 0 到 a a a 种类的红茶,每次操作给出一个 p i p_i pi​,如果 p i = − 1 p_i=-1 pi​=−1,那么就捡起之前最早丢掉的红茶,否则,如果你拥有种类 p i p_i pi​ 的红茶,那么丢掉它,如果你没有并且之前没有拥有过,那么就购买这个红茶,否则,如果之前拥有过,那么就还是执行 捡起之前最早丢掉的红茶。减红茶时,如果没红茶减就忽视这次操作,然后每次操作完后求出一个 k k k,满足你不拥有种类k的红茶,但是种类0~k-1的红茶你都有

题解

k k k 实际上就是,最小的手里没有的红茶。

这个东西等于 min ⁡ { \min\{ min{最小的没买过的红茶 , , ,最小的丢掉了的红茶 } \} }。

前者用个bool数组统计则可,后者可以用单调队列维护。

代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define maxn 2000010
#define inf 999999999int T,n,a,b,d,p[maxn],mi;
namespace IO{int c;unsigned int seed;unsigned int randnum(){seed^=seed<<13;seed^=seed>>17;seed^=seed<<5;return seed;}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=1;i<=m;i++){if(randnum()%c==0)p[i]=-1;else p[i]=randnum()%b;}}inline void update_ans(unsigned int &ans_sum,unsigned int cur_ans,int no){const static unsigned int mod=998244353;ans_sum^=(long long)no*(no+7)%mod*cur_ans%mod;}
}
struct Queue{int q[maxn],st,ed;inline void init(){st=1,ed=0;}inline void push(int x){q[++ed]=x;}inline int front(){return st<=ed?q[st]:inf;}inline int back(){return q[ed];}inline void pop_front(){st++;}inline void pop_back(){ed--;}bool empty(){return st>ed;}
}q1,q2;
unsigned int ans_sum,cur_ans;
void up(int x)
{cur_ans=min(q2.front(),mi);//printf("ans : %u\n",cur_ans);IO::update_ans(ans_sum,cur_ans,x);
}
bool v[maxn],bought[maxn];
void work1(int x)
{bought[p[x]]=v[p[x]]=true;while(bought[mi])mi++; up(x);
}
void work2(int x)
{if(d)return;v[p[x]]=false;q1.push(p[x]);while(!q2.empty()&&q2.back()>p[x])q2.pop_back();q2.push(p[x]);up(x);
}
void work3(int x)
{if(d||q1.empty())return;v[q1.front()]=true;if(q2.front()==q1.front())q2.pop_front();q1.pop_front();up(x);
}int main()
{scanf("%d",&T);while(T--){ans_sum=0;q1.init();q2.init();IO::init_case(n,a,b,d,p);memset(v,false,sizeof(v));memset(bought,false,sizeof(bought));for(int i=0;i<=a;i++)bought[i]=v[i]=true;mi=a+1;for(int i=1;i<=n;i++){if(p[i]==-1)work3(i);else if(v[p[i]])work2(i);else if(!bought[p[i]])work1(i);else work3(i);}printf("%u\n",ans_sum);}
}

LOJ #541.「LibreOJ NOIP Round #1」七曜圣贤 题解相关推荐

  1. 【LibreOJ】#541. 「LibreOJ NOIP Round #1」七曜圣贤

    [题意]一开始车上有编号为0~a的红茶,过程中出现的红茶编号仅有[0,b),有三种操作: 1.买进编号未在车上出现过的红茶. 2.丢掉车上指定编号的红茶. 3.将最早丢出去的红茶捡回来. 每次操作后求 ...

  2. LibreOJ NOIP Round #1」七曜圣贤

    B. 七曜圣贤 内存限制:1024 MiB时间限制:2500 ms标准输入输出 题目类型:传统评测方式:文本比较 题目描述 本题 C/C++ 时限 2.5 秒,Pascal 时限 5 秒.最后将改时限 ...

  3. LOJ#538. 「LibreOJ NOIP Round #1」数列递推

    description sosusosu 虐爆 OI 之后成为了一名文化课选手.一天,他做作业碰到了一堆数列问题,每道题给出的数列都是以下形式: 给定一个下标从000开始,无限长的整数列ai{a_{i ...

  4. LOJ#539. 「LibreOJ NOIP Round #1」旅游路线

    n<=100,m<=1000的图,在此图上用油箱容量C<=1e5的车来旅行,旅行时,走一条边会耗一单伟油,在点i时,若油量<ci,则可以把油以pi的价格补到ci,pi<= ...

  5. 「LibreOJ NOIP Round #1」旅游路线

    「LibreOJ NOIP Round #1」旅游路线 题目链接 做法: 首先肯定要预处理些东西,来使单词询问达到\(o(logn)\)或者\(o(1)\)的复杂度,又因为距离这个东西的范围太大,我们 ...

  6. LOJ #510. 「LibreOJ NOI Round #1」北校门外的回忆(倍增+动态开点线段树)

    题目 这个题是一个精彩的分析性质区间离散的问题 真的详细 维护链真的一绝. LOJ\rm LOJLOJ最短ACCode\rm AC \ CodeAC Code #include<bits/std ...

  7. LOJ#510. 「LibreOJ NOI Round #1」北校门外的回忆(线段树)

    题面 传送门 题解 感谢\(@M\_sea\)的代码我总算看懂题解了-- 这个操作的本质就是每次把\(x\)的\(k\)进制最低位乘\(2\)并进位,根据基本同余芝士如果\(k\)是奇数那么最低位永远 ...

  8. LOJ #573. 「LibreOJ NOI Round #2」单枪匹马 线段树

    $f$ 函数暴力计算的话是 $O(n)$ 的(用一个 $\frac{x}{y}$ 来保存每一步计算结果,然后依次合并) 我们将一段区间的结果写成 $\frac{ax+by}{cx+dy}$ 的形式,初 ...

  9. 「LibreOJ NOI Round #2」不等关系 (dp+NTT分治)

    description 戳我看题目哦 solution 有一道非常相似的题目 一棵树,每条边限制两个端点的大小关系(限制 a[u]>a[v]a[u]>a[v]a[u]>a[v] 或 ...

  10. 【LOJ574】「LibreOJ NOI Round #2」黄金矿工

    [题目链接] 点击打开链接 [思路要点] 可参考 官方题解 . 以下为笔者个人的见解,方便起见,下称矿工为老鼠,金矿为洞. 我们可以对洞的权值加上深度,老鼠的权值减去深度,从而不需要考虑树的边权. 考 ...

最新文章

  1. element ui select设置不显示不存在的项_appium—等待时间设置方法
  2. UILable和UITextField的详细讲解
  3. Table表格横竖线实现Css
  4. 【Redis】redis基本数据结构之ZSet
  5. 《南溪的目标检测学习笔记》——基础算子的学习笔记
  6. RSocket 基于消息传递的反应式应用层网络协议
  7. Atitit import sql fun 重要的sql功能扩展 ext 目录 1.1. Insert merge 1 1.2. Insert set 1 1.2.1. 13.2.5. LOAD
  8. 案例 - 收藏集 - 掘金
  9. 医院信息化建设(2)---医疗业务
  10. BackTrack5(BT5) 硬盘安装 教程
  11. (投影:Projector)Unity5 使用Projector实现纹理投射
  12. 多元微积分_旋度1.正负0旋度
  13. [luogu]P1852跳跳棋
  14. pandas绘图线条颜色大全
  15. 【技巧】Unity 获取Android设备系统语言
  16. xp系统网上邻居看不到局域网电脑_网上邻居看不到局域网的其它计算机名
  17. 如何采集小红书最新版(2018年9月)数据
  18. Datawhale--组队学习第12期--python爬虫基础学习---task0/task1环境配置和网页请求基础
  19. jQuery对Class属性的操作
  20. SpringBoot启动时:Process finished with exit code 0解决办法

热门文章

  1. unity使用PhotonEngine实现多人联机游戏开发(一)
  2. 初识Springboot Security和Thymeleaf
  3. 论文笔记:YOLOv3: An Incremental Improvement(yolo v3)
  4. python相对和绝对的路径_python---相对和绝对路径
  5. 常用的滚动广告(配合flash)
  6. HoloLens2实现拍照
  7. vue基本语法(个人学习笔记一)
  8. 121买卖股票的最好时机--力扣题解
  9. 每日提醒按时完成各项任务的手机app有什么?
  10. oracle如何把多条放单条,oracle利用游标单条插入数据举例