首页 > 其他分享 >Even(23Nowcoder6.J)(二分+可持久化线段树)

Even(23Nowcoder6.J)(二分+可持久化线段树)

时间:2023-08-04 22:23:16浏览次数:29  
标签:Even cnt int Max 线段 rtv 序列 23Nowcoder6 id

题意:

给定一个序列\(a\),定义一次操作选择序列中一个元素\(a[i]\), 使\(a_i = \lfloor \frac{a_i}{2} \rfloor\),其中\(a_i\)为当前序列中的最大偶数,若没有则是最大奇数。

有\(q\)组询问,每次给定\(k, l, r\)分别表示操作次数和操作区间,每次回答操作完成后区间中的\(Max\),询问间互相独立。

\(n\le10^4, a_i\le 10^9, 1\le l\le r \le n,k\le 10^9\)

Solution:

\(Hint1\) 不管奇数还是偶数,操作次数始终是\(\log{a_i}\)次,所以一共能操作\(n * \log{a_i}\)次

\(Hint2\) 考虑一次询问的\(k=10^9\),区间为\([1,n]\)次的情况,如果那么每次一操作的元素下标是一定的,令该序列为\(Operations\)

\(Hint3\) 考虑获取这个序列,优先队列模拟即可

\(Hint4\) 考虑任意选择区间,\(k=10^9\),容易知道此时的操作序列一定为\(Operations\)的一个子序列,令该序列为\(SubOperations\), 那随着\(k\)缩小,新的操作序列一定为\(SubOperations\)的一个前缀

\(Hint5\) 考虑以建立\(|Operations|\)棵线段树,每棵线段树内部维护信息为\(cnt和Max\),内部下标为\([1, n]\),那么第\(i\)棵线段树中\(cnt\)记录执行到第\(i\)次操作时对区间的操作次数,那么\(Max\)就是维护一个区间最大值,每次操作都是单点修改,只会改变一条链,故建立可持久化线段树。

\(Hint6\) 考虑解决询问,我们只要每次二分这\(|Operations|\)个版本,找到第一个区间内操作次数\(\ge k\)的版本即可,然后输出区间最大值即为答案

时间复杂度\(O(qlog^2+n\log^2)\),空间复杂度\(O(nlog^2)\)

比题解低能,但是思想简单,写法简单,但是没写出来

标签:Even,cnt,int,Max,线段,rtv,序列,23Nowcoder6,id
From: https://www.cnblogs.com/Fighoh/p/17607205.html

相关文章

  • 7-Locust自带的events钩子函数
    EventsHookLocust提供了事件钩子函数,它们可以在特定的时间点执行,例如test_start,其类似与pytest中的setup_module使用方法举例使用时需要引入events模块fromlocustimportevents自定义一个方法,若不清楚需要接收什么参数,一般来说直接给一个可变关键字参数**kwargs即可(除非......
  • [Javascript] event target and currentTarget
    <Parent><child><button/></child></Parent>functiononClick(event){console.log('target:',event.target)//buttonconsole.log('currentTarget',event.currentTarget)//parent}pa......
  • ChatGPT 问答00005 Spring的ApplicationEventPublisher的使用案例
    下面是一个使用ApplicationEventPublisher的简单示例,演示了如何在SpringBoot中使用该接口发布和监听事件:首先,定义一个自定义的事件类CustomEvent,用于封装事件的数据:publicclassCustomEvent{privatefinalStringmessage;publicCustomEvent(Stringmessage){......
  • [Ynoi2012] NOIP2015 充满了希望(扫描线+线段树)
    题目传送门solution简单题。我们正着做扫描线。设\(t_i\)表示位置\(i\)最后一次进行二操作的时间,那么一操作就是交换\(t_x,t_y\),二操作就是区间复制。对于三操作,开一个树状数组,如果查询的位置的\(t_x=j\),就在\(j\)的位置上加一。查询就是查询后缀和。#include<bit......
  • [async]子线程内开启协程 RuntimeError: There is no current event loop in thread '
    在子线程内直接获取事件循环会报错:RuntimeError:Thereisnocurrenteventloopinthread'Thread-2',此时的代码为:loop=asyncio.get_event_loop()loop.run_until_complete(协程函数) #执行解决方法:在子线程内创建并配置事件循环new_loop=asyncio.new_event_loop(......
  • 【复健】线段树
    线段树复健OJ上的题还没做完,下午再说(你概念一种二叉搜索树,通过二叉树形结构储存数据,能够解决大部分与区间操作有关的问题,当然应用范围不止于区间操作。原理是用二分(?)维护一定的区间。主体部分实现建树考虑递归建树,一直二分直到只剩一个数据为止。展开代码inlinevoidpu......
  • [MySQL] 调用定时器时event_scheduler是Off问题解决
    永久解决方法:修改MySQL配置文件,设置event_scheduler=ONvi/etc/my.cnf在[mysqld]下添加一行重启mysql服务event_scheduler=ON临时方法执行mysql语句1、查看事件调度器状态showVARIABLESlike'event_scheduler'......
  • [HEOI2013] Segment李超线段树
    RT感觉会模板就差不多了,可用作处理一些线段或直线的问题,转化过来的也可以。比如DP的斜率优化,直线的话只用一个log,线段要两个log。[HEOI2013]Segment模板#include<iostream>usingnamespacestd;constintmod1=39989;constintmod2=1e9;constdoubleesp=1e-9;const......
  • Android中dispatchTouchEvent,&nbs…
    onInterceptTouchEvent用于改变事件的传递方向。决定传递方向的是返回值,返回为false时事件会传递给子控件,返回值为true时事件会传递给当前控件的onTouchEvent(),这就是所谓的Intercept(拦截)。[tisaps:正确的使用方法是,在此方法内仅判断事件是否需要拦截,然后返回。即便需要拦截......
  • 线段树
    「观前提醒」「文章仅供学习和参考,如有问题请在评论区提出」目录引入基本原理建树区间查询单点修改区间修改+懒惰标记例题P3372【模板】线段树1-洛谷P3373【模板】线段树2-洛谷小结参考资料引入线段树(SegmentTree)是算法竞赛中常用的用来维护区间信息的数据结构......