PROKLETNIK

题目描述:给出\(n\)个数,定义一段连续的数为魔法串是该区间的左右端点值正好是区间的最小值与最大值(最小值可以在左也可以在右,最大值也一样)。\(Q\)个询问,每次询问一个区间\([L, R]\),问该区间的子区间为魔法串的最大长度。

solution
离线所有的询问,现在考虑左小右大的魔法串。然后如果可以维护\(i\)之前的点为左端点的最长魔法串的答案,那么以\(i\)为右端点的询问的答案就是\([L, R]\)取最大值。
问题是如何维护。
因为现在只考虑左小右大的魔法串,所以考虑维护一个单调递增的队列,先考虑\(i\)入队
1、\(i\)不小于队尾。设\(taller[i]\)表示前\(i\)个数比\(i\)大的,且离\(i\)最近的位置,那么队列中在\(taller[i]\)右边的点都可以以\(i\)为右端点,而且\(i\)是当前它们的最优解。(下一个点会解释为什么只有队列中的点才能被更新答案)可以考虑用线段树来维护这个队列中的点的最优解,线段树对应队列的第几个数(即对应队列下标),\(i\)进队。
2、\(i\)小于队尾。这时,队尾不可能再成为魔法串的左端点(因为\(i\)小于队尾,队尾不是最小值),也就是说队尾的答案不会也不能在更新,所以可以把队尾的答案取出,存进另一棵线段树(以队列中的值为下标,即原来数的下标)或树状数组。不断地把队尾取出,直到\(i\)不小于队尾。这时\(i\)不能更新队列中的任何一个数(因为\(i\)不是最大值),所以\(i\)直接进队。
对于以\(i\)为右端点的询问,求出第二棵线段树\([L, R]\)的最大值,以及\(L\)在队列中的位置\(w\),然后求队列的那棵线段树\(w\)之后的最大值,取这两个值的最大值就是答案。

时间复杂度:\(O((Q+n)logn)\)

COCI 2015/2016 Day 8 PROKLETNIK的更多相关文章

  1. 【COCI 2015/2016 #3】Nekameleoni

    题目描述 “这好难啊,我有一个简单点的题,他们解决不了.” AKPAKP有一个长度为nn的线段,这个线段原来染有颜色,AKPAKP只认识kk种颜色.当然原来的颜色也包含在着kk种颜色之间. 可以进行m ...

  2. Dynamics XRM Tools 2015 2016

    Download Link: Dynamics XRM Tools 2015/2016 Overview Dynamics XRM Tools brings you a quality range o ...

  3. 20145225《Java程序设计》 2015—2016年学期课程总结

    20145225<Java程序设计> 2015—2016年学期课程总结 读书笔记链接汇总 1.2016年2月25日 <Java程序设计>课程准备之问卷调查 摘要: 一.你对自己 ...

  4. HeyWeGo小组《Java程序设计》 2015—2016年学期团队项目总结

    HeyWeGo小组<Java程序设计> 2015—2016年学期团队项目总结 题目简介 一个简单的扫雷小游戏,在12*12的方格盘上,首先可以设定雷的个数,然后点击开始程序就会随机布雷,开 ...

  5. COCI 2015、2016 1st round 题解(官方)

    官方题解: 官方代码: Code-KARTE: #include <cstdio> #include <iostream> #include <cstring> u ...

  6. 2015,2016 Open Source Yearbook

    https://opensource.com/yearbook/2015 The 2015 Open Source Yearbook is a community-contributed collec ...

  7. Orchard CRM 更新 - 同时支持 Microsoft Dynamics CRM 2011, 2013, 2015, 2016!

    本版本支持: 使用Orchard 1.8.1 系统 Dynamics CRM 2015 DLL .Net Framework 4.5.2 演示版本: http://www.orchardcrm.com ...

  8. Dynamics CRM 2015/2016 Web API:聚合查询

    各位小伙伴们,今天是博主2016年发的第一篇文章.首先祝大家新年快乐.工资Double,哈哈.今天我们来看一个比較重要的Feature--使用Web API运行FetchXML查询! 对的,各位.你们 ...

  9. Dynamics CRM 2015/2016新特性之七:有了文档模板,打印分析So Easy

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复190或者20160216可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 从CRM 2015 UR1开始, ...

随机推荐

  1. Silverlight 结合ArcGis 在地图上画线

    原文 http://www.dotblogs.com.tw/justforgood/archive/2012/05/10/72085.aspx 先来看看完成后的画面,我从桃园画到高雄,再由高雄画到香港 ...

  2. Fragment与Activity相互传递数据:

    Activity向Fragment传递数据:在Activity中创建Bundle数据包,并调用Fragment的setArguments(Bundle bundle)方法即可将Bundle数据包传给F ...

  3. UESTC_Palindromic String 2015 UESTC Training for Search Algorithm & String<Problem M>

    M - Palindromic String Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 128000/128000KB (Java ...

  4. 有序线性搜索(Sorted/Ordered Linear Search)

    如果数组元素已经排过序(升序),那我们搜索某个元素就不必遍历整个数组了.在下面给出的算法代码中,到任何一点,假设当前的arr[i]值大于搜索的值data,就可以停止搜索了. #include<s ...

  5. 今日成长笔记2016-11-18 - 关于java开发

    好久没有写今日成长笔记了,要记得上一次写笔记还是2016-09-05,今天心血来潮,写一写最近发生在自己身上的事情,以后我要坚持每天写日记.我承认自己身上的确或多或少的存在不足,现在把它们抛出来,并记 ...

  6. MAC 下cocos2d-x lua 使用dragonbones的方法

    项目使用db,网上查了半天全是vs和android的流程,没查到有mac的.这里记录一下. quick-cocos-x下的使用方法: a. 将dragonbones(放入ucocos2d_libs中) ...

  7. Java算法简介及排序剖析

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 从小白晋升,一路走来:从helloworld,到JFrame,再到Android:从城外小子,到内城 ...

  8. linux光盘、U盘的挂载与卸载

    mount [-t vfstype] [-o options] device dir1.-t vfstype 指定文件系统的类型,通常不必指定.mount 会自动选择正确的类型.关于一些常用的文件:i ...

  9. Foundation--NSDictionary+NSMutableDictionary

    键值对 key(一般为字符串对象)---vaule(必须是对象) Person *p1 =[[Person alloc ]init]; Person *p2 =[[Person alloc ]init ...

  10. http://www.sufeinet.com/thread-655-1-1.html

    http://www.sufeinet.com/thread-655-1-1.html