Luogu3514 POI2011 Lollipop 递推、构造
题目传送门:https://www.luogu.org/problemnew/show/P3514
题意:给出一个只有$1$和$2$的长度为$N$的数列,$M$次询问是否存在一段连续子区间和为$K$。$N,M \leq 10^6$
考虑存在答案为$Q$的区间会对其他答案有什么影响。然后能够发现:如果存在答案为$Q$的区间,就一定存在$\leq Q$且奇偶性相同的其他区间
证明:对于答案为$Q$的区间$(Q \geq 2)$,我们有以下方式递推出和为$Q - 2$的区间:
$a.num_l == 2,$新区间为$l+1,r$
$b.num_r == 2,$新区间为$l,r-1$
$c.num_l==num_r==1,$新区间为$l+1,r-1$
所以我们可以算出数列中和最大的和为奇数的区间与和为偶数的区间,并用它递推出所有答案区间,最后$O(1)$回答询问即可。
#include<bits/stdc++.h> #define MAXN 1000010 using namespace std; ][] , N , M; inline void culJi(int maxJi); inline void culOu(int maxOu); int main(){ ios::sync_with_stdio(); cin.tie(); cout.tie(); string s; cin >> N >> M >> s; ; ; i <= N ; i++) sum += (num[i] = s[i - ] == : ); ans[sum][] = ; ans[sum][] = N; ) culJi(sum); else culOu(sum); , q = N; ) p++; ) q--; if(p <= q){ < N - q){ sum -= (p - << ) + ; ans[sum][] = p + ; ans[sum][] = N; } else{ sum -= (N - q << ) + ; ans[sum][] = ; ans[sum][] = q - ; } ) culJi(sum); else culOu(sum); } while(M--){ int a; cin >> a; ]) cout << ans[a][] << ] << '\n'; else cout << "NIE\n"; } ; } void culJi(int maxJi){ ){ ]] == ){ ans[maxJi - ][] = ans[maxJi][] + ; ans[maxJi - ][] = ans[maxJi][]; } else ]] == ){ ans[maxJi - ][] = ans[maxJi][]; ans[maxJi - ][] = ans[maxJi][] - ; } else{ ans[maxJi - ][] = ans[maxJi][] + ; ans[maxJi - ][] = ans[maxJi][] - ; } maxJi -= ; } } void culOu(int maxOu){ ){ ]] == ){ ans[maxOu - ][] = ans[maxOu][] + ; ans[maxOu - ][] = ans[maxOu][]; } else ]] == ){ ans[maxOu - ][] = ans[maxOu][]; ans[maxOu - ][] = ans[maxOu][] - ; } else{ ans[maxOu - ][] = ans[maxOu][] + ; ans[maxOu - ][] = ans[maxOu][] - ; } maxOu -= ; } }
Luogu3514 POI2011 Lollipop 递推、构造的更多相关文章
- hdu 1757 A Simple Math Problem (构造矩阵解决递推式问题)
题意:有一个递推式f(x) 当 x < 10 f(x) = x.当 x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + ...
- [ 9.24 ]CF每日一题系列—— 468A构造递推
Description: 1 - n个数问你能否经过加减乘除这些运算n -1次的操作得到24 Solutrion: 一开始想暴力递推,发现n的范围太大直接否决,也否决了我的跑dfs,后来就像肯定有个递 ...
- HDU 1757 A Simple Math Problem 【矩阵经典7 构造矩阵递推式】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=1757 A Simple Math Problem Time Limit: 3000/1000 MS (J ...
- HDU4565 So Easy! —— 共轭构造、二阶递推数列、矩阵快速幂
题目链接:https://vjudge.net/problem/HDU-4565 So Easy! Time Limit: 2000/1000 MS (Java/Others) Memory L ...
- poj2166 Heapsort[构造递推]
构造一个n个点的大根堆让全部弹出时交换位置次数最多. 真心佩服我自己智商,这种题都做不出来 交换是在每次弹出堆顶,然后把堆尾元素置于堆顶,然后向下调整时产生的.玩样例可以发现似乎数字1每次都出现在堆最 ...
- 2018 焦作网络赛 L Poor God Water ( AC自动机构造矩阵、BM求线性递推、手动构造矩阵、矩阵快速幂 )
题目链接 题意 : 实际上可以转化一下题意 要求求出用三个不同元素的字符集例如 { 'A' .'B' .'C' } 构造出长度为 n 且不包含 AAA.BBB CCC.ACB BCA.CAC CBC ...
- 利用Cayley-Hamilton theorem 优化矩阵线性递推
平时有关线性递推的题,很多都可以利用矩阵乘法来解决. 时间复杂度一般是O(K3logn)因此对矩阵的规模限制比较大. 下面介绍一种利用利用Cayley-Hamilton theorem加速矩阵乘法的方 ...
- HDU 2842 (递推+矩阵快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2842 题目大意:棒子上套环.第i个环能拿下的条件是:第i-1个环在棒子上,前i-2个环不在棒子上.每个 ...
- P1067Warcraft III 守望者的烦恼(十大矩阵问题之七求递推式)
https://vijos.org/p/1067 守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫“闪烁”,这个技能可以把她 ...
随机推荐
- [OTA] 系统加密后Recovery是如何读取OTA升级包的
目前很多Android手机采用的FUSE方案,也就是内部SD卡不单独占用一个文件系统而实际上占用的是userdata的空间. 当系统加密后,解密需要VOLD的参于.而在Recovery模式下,是没有V ...
- Spark性能优化(基于Spark 1.x)
Task优化: 1.慢任务的性能优化:可以考虑减少每个Partition处理的数据量,同时建议开启spark.speculation(慢任务推导,当检测的慢任务时,会同步开启相同的新任务,谁先完 ...
- tkinter中lable标签控件(二)
lable控件 对于tkinter来说,学起来很简单,只要设置好相应的参数即可出结果,所以不用刻意去记住这些参数.学习一遍后理解每个参数的作用是什么即可. 当下次用到的时候来笔记上看一下就行. 内容很 ...
- StartUML用法
转载地址 http://blog.csdn.NET/tianhai110 (下面参考了原博主的内容,也加入自己的内容,为了自己脑补,也方便其他看到的人脑补) 使用StartUML绘制用例图: ...
- centos7搭建SVN+Apache+IF.svnadmin支持https实现web管理SVN
阅读目录 1. 介绍 2. 软件准备 3. 建立SVN Server仓库 4. 配置安装PHP&IF.SVNadmin 5. 启动服务 1.介绍 公司最近想把Windows server平台的 ...
- C#生成真值表
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- cobaltstrike3.8服务器搭建及使用
参考链接: https://www.ezreal.net/archives/166.htmlhttp://blog.cobaltstrike.com/category/cobalt-strike-2/ ...
- 【Beta Scrum】冲刺! 3/5
1. 今日完成情况 人员 学号 分工 是否完成 完成情况 胡武成 031502610 完成登录注册api,协助web端完成api N SDN课程实践加上课缘故,仅仅写完了登录注册的逻辑判断内容,但是短 ...
- BeanFactory和ApplicationContext的简单介绍
引言 Spring通过一个配置文件描述Bean及Bean之间的依赖关系,利用Java语音的反射功能实例化Bean并建立Bean之间的依赖关系.Spring的IoC容器在完成这些底层工作的基础上,还提供 ...
- ECstore后台报表显示空白问题解决办法
执行如下sql语句: INSERT INTO `sdb_ectools_analysis` (`id`, `service`, `interval`, `modify`) VALUES (1, 'b2 ...