【Codeforces 1000F】One Occurrence
题意:给一个序列,每次查询某个区间内一个只出现一次的数。
思路:线段树。
首先我们看只出现一次的本质是什么。
如果一个数\(x\)在\((l,r)\)中只出现了一次,那么它在其中第一次出现位置为\(p\),其下一次出现肯定大于\(r\)。
那么我们就有一个想法:
用线段树维护每一个数的下一次出现,那么区间中最大的一个还没有超过区间的右端点,则说明肯定无解。
但是我们只能够存下这个区间中每个数的第一次出现。
只好离线处理。
把所有的操作按照左端点排序,然后:
从右往左扫描所有的点,遇到一个新的就把当前的值下一次出现记录,同时把下一次出现“删除”。只用把其设成\(-\infty\)即可,因为足以让其不能参加取\(max\)。
这样就好了。
线段树需要单点修改、区间查询。
所以果断\(zkw\)。跑的飞快。
TangentDay:莫队。首先把操作离线,把他们按照左端点排序。维护一个(l,r)表示现在处理到的区间。
然后假设现在我们考虑的区间是(nl,nr),那么我们需要从(l,r)"挪"到(nl,nr):
不断把r右移直到r>=nr,同时把路上的所有数出现次数加1,同时维护所有的现在出现次数为1的数的集合。
不断把l左移直到l<=nl,r左移直到r<=nr,l右移直到l>=nl。
这个顺序是不能改变的。因为如果先左移r或者先右移l可能导致区间长度为负数。
但这个复杂度是O(q sqrt(n) log(n))的,TLE。
ivan100sic:BIT套set。首先把操作离线,把他们按照右端点排序。
维护一个BIT表示每一个后缀出现的数字有哪些是只有一次出现的。
然后就发现我们需要的是区间修改+单点查询。
从左往右扫描右端点,每到一个新的点就把(上一次出现,上上次出现)的那段区间干掉,并且加入(这次出现,上次出现)这个区间。
查询的时候就看左端点上有多少个第一次出现了。
但这个复杂度是O(q log(n)^2)的,TLE。
修改了几次都没有效果。
ei133333:线段树套set。其实和ivan100sic差不多,只是他单点修改,区间查询了。
这样其实想的更自然???可惜还是TLE。
ei133333:线段树。还是离线操作,并且从左往右扫描右端点。
然后每次加入(这次出现,上次出现)这个区间,但不删去(上一次出现,上上次)这段,留着,当查询的时候删。
这里就发现线段树中维护的是一堆(数,出现位置)这个pair,
查询的时候把这个节点的所有pair中出现位置不是最后一次出现位置的干掉。
应该能AC了。复杂度O(q log(n))
natsugiri:线段树。强烈谴责该选手比赛贴板子的恶劣行为,并禁赛三年。(删掉
然后就和上课讲的方法差不多了。
krijgertje:莫队。和TangentDay类似,只不过他用的是链表,消掉了一个log。
然后他的排序方式也不一样:先按照左端点排序,如果左端点是奇数,则右端点按照从小到大排序,否则从大到小。
可惜复杂度O(q sqrt(n)),还是TLE。
krijgertje:线段树。和上课讲的方法一模一样。
总结:出题人很厉害,
O(q sqrt(n))的方法在第8个点TLE了,
O(q log(n)^2)的方法即使过了第8个点还有第9个点,
都安排上了。
但是莫队还是可以过的。
思路2:莫队。
我们在加入、删除一个数的时候这样处理:
我们记录这个数是否只有一次出现,并且记录这个数所在的块中有几个只有一次出现的。
块的大小自定。取\(O(\sqrt{n})\)可以达到最好的效果。
那么再看我们怎么找到第一个只有一次出现的数。
首先我们沿着每个块跑,看这个块中有没有。
如果有就进块内跑,找到第一个有的就是辣。
可惜隔壁线段树不知道比它高明到哪里去了,跑的比香港记者还快
但是可以贴着时限过。
【Codeforces 1000F】One Occurrence的更多相关文章
- 【codeforces 415D】Mashmokh and ACM(普通dp)
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
- 【codeforces 707E】Garlands
[题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...
- 【codeforces 707C】Pythagorean Triples
[题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...
- 【codeforces 709D】Recover the String
[题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...
- 【codeforces 709B】Checkpoints
[题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...
- 【codeforces 709C】Letters Cyclic Shift
[题目链接]:http://codeforces.com/contest/709/problem/C [题意] 让你改变一个字符串的子集(连续的一段); ->这一段的每个字符的字母都变成之前的一 ...
- 【Codeforces 429D】 Tricky Function
[题目链接] http://codeforces.com/problemset/problem/429/D [算法] 令Si = A1 + A2 + ... + Ai(A的前缀和) 则g(i,j) = ...
- 【Codeforces 670C】 Cinema
[题目链接] http://codeforces.com/contest/670/problem/C [算法] 离散化 [代码] #include<bits/stdc++.h> using ...
- 【codeforces 515D】Drazil and Tiles
[题目链接]:http://codeforces.com/contest/515/problem/D [题意] 给你一个n*m的格子; 然后让你用1*2的长方形去填格子的空缺; 如果有填满的方案且方案 ...
随机推荐
- LeetCode专题-Python实现之第13题:Roman to Integer
导航页-LeetCode专题-Python实现 相关代码已经上传到github:https://github.com/exploitht/leetcode-python 文中代码为了不动官网提供的初始 ...
- linux集群自动化搭建(生成密钥对+分发公钥+远程批量执行脚本)
之前介绍过ansible的使用,通过ssh授权批量控制服务器集群 但是生成密钥和分发公钥的时候都是需要确认密码的,这一步也是可以自动化的,利用ssh + expect + scp就可以实现,其实只用这 ...
- .net里面的字典Dictionary
Dictionary<int, string> d = new Dictionary<int, string>(); d.Add(1, "wjl ...
- win2008R2环境配置
1)下载系统 [https://msdn.itellyou.cn/] 选择带sp1的,这个系统是08R2中较为完善的一种 2)安装之后首先不要激活和安装.net framework 先安装ii ...
- Captcha服务(后续2)— 改造Captcha服务之Asp.Net Core项目中如何集成TypeScript
环境准备 .Net Core 版本:下载安装.Net Core SDK,安装完成之后查看sdk版本 ,查看命令dotnet --version,我的版本是2.2.101 IDE: Visual Stu ...
- Android开发——打造简单的Viewpager指示器(小圆点指示器)
准备工作: 1.两张不同颜色的小圆点图片,可以去阿里巴巴矢量图网站搜索 我把我使用的图片贴出来 2.一个简单的Viewpager的实现 下面是简单的Viewpager实现步骤: 1.布局文件使用Vie ...
- 反射:修改请求头HttpWebRequest/Webclient Header属性的date值-"此标头必须使用适当的属性进行修改"
场景:调用外部接口,接口要求Header信息里面包涵Date信息,且Date信息必须是格式化好的,(他们用的是Java),但是C#默认的是Date属性不能被修改, 所以就会出现下面的错误: 未处理的异 ...
- netfilter及iptables基本概念
网络访问控制 网络访问控制可以简单理解为防火墙,常用的网络访问控制有:哪些IP可以访问服务器, 可以使用哪些协议,哪些接口,是否需要对数据包进行修改等. netfilter netfilter是通过i ...
- Serialization
title: Serialization date: 2018-03-26 15:18:26 tags: [JAVA,Read] categories: other --- 概述 程序运行时,变量的内 ...
- 自然语言处理NLP快速入门
自然语言处理NLP快速入门 https://mp.weixin.qq.com/s/J-vndnycZgwVrSlDCefHZA [导读]自然语言处理已经成为人工智能领域一个重要的分支,它研究能实现人与 ...