Codeforces Round 893 (Div. 2) E1. Rollbacks (Easy Version)

news2025/3/13 15:36:40

Codeforces Round 893 (Div. 2) E1. Rollbacks (Easy Version)在这里插入图片描述思路:单点更新+离线莫队区间查询区间不同数字个数+栈保留last_state
源代码:

#include<cstdio>
#include<cmath>
#include<algorithm>
#include <stack>
using namespace std;
const int MAXN=1000005,MAXA=1000005;

struct query{
	int l,r,ti,id;
};

int N,OP,blksiz,q,m;
int a[MAXN],mod[MAXN][3];

int ans[MAXN];
query que[MAXN];

bool CaptainMo(query a,query b){
    a.l/=blksiz;a.r/=blksiz;
    b.l/=blksiz;b.r/=blksiz;
    if(a.l==b.l)
        return a.r<b.r||(a.r==b.r&&a.ti<b.ti);
    return a.l<b.l;
}

int l,r,t,tans;
int cnt[MAXA];
void add(int x){
    cnt[x]++;
    tans+=(cnt[x]==1);
}
void del(int x){
    cnt[x]--;
    tans-=(cnt[x]==0);
}
void go(){
    t++;
    if(l<=mod[t][0]&&mod[t][0]<=r){
        del(mod[t][2]);
        add(mod[t][1]);
    }
    a[mod[t][0]]=mod[t][1];
}
void back(){
    if(l<=mod[t][0]&&mod[t][0]<=r){
        del(mod[t][1]);
        add(mod[t][2]);
    }
    a[mod[t][0]]=mod[t][2];
    t--;
}

struct last_state{
	char c;
	int x;
};

stack<last_state> st;

int main(){
    int N;
	scanf("%d",&N);
	OP = N;
    blksiz=pow(N,2.0/3.0);

    char ch;
	int x;
	int lx,rx;
	int tot = 0;
	char last_ch = '*';
	int last_x = 0;
	for(int i = 1;i <= OP;i++){
		getchar();
		scanf("%c", &ch);
		//cout << "tot:" << tot << endl;
		switch(ch){
			case '+':{
				++tot;
				++m;
				scanf("%d", &x);
				mod[m][0] = tot;
				mod[m][1] = x;
				//last_x = a[tot];
				st.push({'+', a[tot]});
				a[tot] = x;
				//last_ch = '+';
				break;
			}
			case '-':{
				scanf("%d", &x);
				tot -= x;
				//last_ch = '-';
				//last_x = x;
				st.push({'-', x});
				break;
			}
			case '!':{
				struct last_state ls_temp = st.top();
				st.pop();
				last_ch = ls_temp.c;
				last_x = ls_temp.x;
				if(last_ch == '+'){
					m++;
					mod[m][0] = tot;
				    mod[m][1] = last_x;
					a[tot] = last_x;
					--tot;
				}
				else if(last_ch == '-'){
					tot += last_x;
				}
				break;
			}
			case '?':{
				lx = 1;
				rx = tot;
				//cout << lx << " " << rx << endl;
				++q;
				que[q] = {lx, rx, m, q};
				break;
			}
		}
		/*for(int i = 1;i <= tot;i++){
	    	if(i-1) cout << " ";
	    	cout << a[i];
		}	
		cout << endl;*/
	}
	
    for(int i=1;i<=m;i++)
        mod[i][2]=a[mod[i][0]],a[mod[i][0]]=mod[i][1];
    for(int i=m;i>0;i--)
        a[mod[i][0]]=mod[i][2];
    sort(que+1,que+q+1,CaptainMo);
    l=1,r=1,t=0,tans=1;
    cnt[a[1]]=1;
    for(int i=1;i<=q;i++){
        while(t<que[i].ti)
            go();
        while(t>que[i].ti)
            back();
        while(l<que[i].l)
            del(a[l]),l++;
        while(l>que[i].l)
            l--,add(a[l]);
        while(r<que[i].r)
            r++,add(a[r]);
        while(r>que[i].r)
            del(a[r]),r--;
        ans[que[i].id]=tans;
    }
    for(int i=1;i<=q;i++)
        printf("%d\n",ans[i]);
    return 0;
}

总结:终于把这个E题过了,虽然比赛时没过,但也算差点top200呀2333记录一下赛后一小时内自主补E题,说明前面的题还是做得不够快呀2333

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/883952.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年雷军演讲读后感

文章目录 概述坚持梦想&#xff0c;拆解目标多维学习&#xff0c;掌握方法突破认知&#xff0c;深度探索及时总结&#xff0c;调整方向总结 概述 2023年8月14日晚7点&#xff0c;雷军进行了他个人的第四次年度演讲&#xff0c;大家都看了吗&#xff1f; 本次演讲的主题是&quo…

SRCNN:Image Super-Resolution Using Deep Convolutional Networks

Some words&#xff1a; 这里是一些阅读文章的笔记&#xff0c;这篇文章是第一篇将深度学习应用于超分领域的文章&#xff0c;具有较为重要的意义。 link: https://arxiv.org/pdf/1501.00092.pdf &#xff08;一&#xff09;Abstract&#xff1a; 我们提出一个对于单图像超分…

智慧工地一体化云平台源码:监管端、工地端、危大工程、智慧大屏、物联网、塔机、吊钩、升降机

智慧工地解决方案依托计算机技术、物联网、云计算、大数据、人工智能、VR&AR等技术相结合&#xff0c;为工程项目管理提供先进技术手段&#xff0c;构建工地现场智能监控和控制体系&#xff0c;弥补传统方法在监管中的缺陷&#xff0c;最终实现项目对人、机、料、法、环的全…

SDXL1.0大模型安装与使用

个人网站&#xff1a; 文章目录 前言一、模型下载使用&#xff08;简单体验&#xff09;二、模型下载使用&#xff08;繁琐版&#xff09;三、ComfyUI 前言 使用 Stable Diffusion XL&#xff0c;您可以使用较短的提示创建描述性图像&#xff0c;并在图像中生成文字。该模型在…

【5款登录验证校验】基于jquery实现的5款登录验证码组件(附完整源码)

文章目录 写在前面涉及知识点1、随机字母验证码1.1 效果1.2 实现源码 2、数字运算验证码2.1 效果2.2 实现源码 3、滑块验证码3.1 效果3.2 实现源码 4、图片补全验证码4.1 效果4.2 实现源码 5、顺序点选验证码5.1 效果5.2 实现源码 6、源码分享6.1 百度网盘6.2 123网盘6.3 邮箱留…

cs231n assignment3 q1Network Visualization

文章目录 嫌啰嗦直接看代码Q1 :Network Visualizationcompute_saliency_maps题面解析代码输出 make_fooling_image题面解析代码输出 class_visualization_update_step题面解析代码输出 结语 嫌啰嗦直接看代码 Q1 :Network Visualization compute_saliency_maps 题面 这部分的…

【校招VIP】java语言考点之ConcurrentHashMap1.7和1.8

考点介绍&#xff1a; ConcurrentHashMap是JAVA校招面试的热门考点&#xff0c;主要集中在1.7和1.8的底层结构和相关的性能提高。 理解这个考点要从map本身的并发问题出发&#xff0c;再到hashTable的低性能并发安全&#xff0c;引申到ConcurrentHashMap的分块处理。同时要理解…

2023牛客暑期多校训练营9-B Semi-Puzzle: Brain Storm

2023牛客暑期多校训练营9-B Semi-Puzzle: Brain Storm https://ac.nowcoder.com/acm/contest/57363/B 文章目录 2023牛客暑期多校训练营9-B Semi-Puzzle: Brain Storm题意解题思路代码 题意 解题思路 欧拉定理 a b ≡ { a b % φ ( p ) g c d ( a , p ) 1 a b g c d ( a ,…

认识excel篇3之数据的有效性(数据验证)

数据有效性不仅能够对单元格的输入数据进行条件限制&#xff0c;还可以在单元格中创建下拉列表菜单方便用户选择输入。如果没有做数据验证&#xff0c;单元格内默认可以输入任意类型的数据。数据验证就是限制单元格输入数据&#xff08;必须输入符合要求的才能输入&#xff09;…

OpenCV-Python中的图像处理-视频分析

OpenCV-Python中的图像处理-视频分析 视频分析Meanshift算法Camshift算法光流Lucas-Kanade Optical FlowDense Optical Flow 视频分析 学习使用 Meanshift 和 Camshift 算法在视频中找到并跟踪目标对象: Meanshift算法 Meanshift 算法的基本原理是和很简单的。假设我们有一堆…

使用Logstash将数据从MySQL同步至Elasticsearch(有坑)

文章目录 一、准备工作1、安装elasticSearchkibana2、安装MySQL3、安装Logstash 二、全量同步1、准备MySQL数据与表2、上传mysql-connector-java.jar3、启动Logstash4、修改logstash.conf文件5、修改full_jdbc.sql文件6、打开Kibana创建索引和映射7、重启logstash进行全量同步8…

linux 系统中vi 编辑器和库的制作和使用

目录 1 vim 1.1 vim简单介绍 1.2 vim的三种模式 1.3 vim基本操作 1.3.1命令模式下的操作 1.3.2 切换到文本输入模式 1.3.3 末行模式下的操作 2 gcc编译器 2.1 gcc的工作流程 2.2 gcc常用参数 3 静态库和共享&#xff08;动态&#xff09;库 3.1库的介绍 3.2静态…

Dockerfile自定义镜像

文章目录 Dockerfile自定义镜像镜像结构Dockerfile语法构建java项目 小结 Dockerfile自定义镜像 常见的镜像在DockerHub就能找到&#xff0c;但是我们自己写的项目就必须自己构建镜像了。 而要自定义镜像&#xff0c;就必须先了解镜像的结构才行。 镜像结构 镜像是将应用程序及…

PyTorch基础(16)-- torch.gather()方法

一、前言 在实现DQN的过程中&#xff0c;torch.gather()这个方法引起了我的注意&#xff0c;原因有二&#xff1a;1&#xff09;这个函数在我硕士期间很少遇见&#xff0c;用到的次数更是少之又少&#xff1b;2&#xff09;torch.gather()这个方法是如何使用的呢&#xff0c;以…

[HZNUCTF 2023 preliminary] 2023杭师大校赛(初赛) web方向题解wp 全

ezflask 先看题目&#xff0c;应该是模板注入&#xff08;SSTI&#xff09;&#xff0c;输入{{7*‘7’}}直接报错误。 发现模板是反序输出的&#xff0c;怪不得不能直接输入{{}}。 输入}}‘7’*7{{返回777777&#xff0c;是jinja2 //直接手打&#xff0c;无所谓我是怨种 ?nam…

Mysql中使用存储过程插入decimal和时间数据递增的模拟数据

场景 Mysql插入数据从指定选项中随机选择、插入时间从指定范围随机生成、Navicat使用存储过程模拟插入测试数据&#xff1a; Mysql插入数据从指定选项中随机选择、插入时间从指定范围随机生成、Navicat使用存储过程模拟插入测试数据_mysql循环插入随机数据_霸道流氓气质的博客…

【第三阶段】kotlin语言中的先决条件函数

用于函数内部判断异常&#xff0c;节省开发 1.checkNotNull&#xff08;&#xff09;如果传入为null则抛出异常 fun main() {var name:String?nullcheckNotNull(name) }执行结果 2.requireNotNull ()如果传入为null则抛出异常 fun main() {var name:String?nullrequireNot…

基于PSO-KELM的时间序列数据预测(含对比实验)

前段时间有粉丝私信想让我出一期对时间序列预测的文章&#xff0c;所以今天它来了。 时间序列数据&#xff0c;如股指价格&#xff0c;具有波动性、非线性和突变的特点&#xff0c;对于这类数据的预测往往需要可靠强健的预测模型&#xff0c;而传统的机器学习算法如SVM、BP等…

详解RFC 793文档-3

3.4 建立连接 三次握手用来建立连接,这个过程通常由一个TCP发起,并由另一个TCP响应。如果两个TCP同时启动该过程,该过程也可以工作。这说明客户端和服务器可以同时发起连接请求,且能够连接成功。当同时尝试连接时,每个TCP在发送自己的SYN后接收到一个不携带任何ACK确认的…

分布式 - 服务器Nginx:一小时入门系列之代理缓冲与缓存

官方文档&#xff1a;https://nginx.org/en/docs/http/ngx_http_proxy_module.html 1. 代理缓冲 proxy_buffer 代理缓冲用于临时存储从后端服务器返回的响应数据。通过使用代理缓冲&#xff0c;Nginx可以在接收完整的响应后再将其发送给客户端&#xff0c;从而提高性能和效率…