Codeforces750E. New Year and Old Subsequence (线段树维护DP)
题意:长为2e5的数字串 每次询问一个区间 求删掉最少几个字符使得区间有2017子序列 没有2016子序列
不合法输出-1
题解:dp i,p(0-4)表示第i个数匹配到2017的p位置删掉的最少数
每次转移的状态可以用一个5X5的矩阵维护 所以用线段树维护一段连续的状态
- #include <bits/stdc++.h>
- using namespace std;
- const int MAXN = 2e5 + 5;
- int n, m;
- char s[MAXN];
- struct node {
- int c[5][5];
- };
- node add(node x, node y) {
- node res;
- for(int i = 0; i < 5; i++)
- for(int j = 0; j < 5; j++) {
- res.c[i][j] = MAXN;
- for(int k = 0; k < 5; k++)
- res.c[i][j] = min(res.c[i][j], x.c[i][k] + y.c[k][j]);
- }
- return res;
- }
- node sum[MAXN << 2];
- void build(int l, int r, int rt) {
- if(l == r) {
- for(int i = 0; i < 5; i++)
- for(int j = 0; j < 5; j++) sum[rt].c[i][j] = (i == j) ? 0 : MAXN;
- if(s[l] == '2') sum[rt].c[0][1] = 0, sum[rt].c[0][0] = 1;
- if(s[l] == '0') sum[rt].c[1][2] = 0, sum[rt].c[1][1] = 1;
- if(s[l] == '1') sum[rt].c[2][3] = 0, sum[rt].c[2][2] = 1;
- if(s[l] == '7') sum[rt].c[3][4] = 0, sum[rt].c[3][3] = 1;
- if(s[l] == '6') sum[rt].c[3][3] = 1, sum[rt].c[4][4] = 1;
- return;
- }
- int mid = l + r >> 1;
- build(l, mid, rt << 1);
- build(mid + 1, r, rt << 1 | 1);
- sum[rt] = add(sum[rt << 1], sum[rt << 1 | 1]);
- }
- node query(int ql, int qr, int l, int r, int rt) {
- if(ql <= l && qr >= r) return sum[rt];
- int mid = l + r >> 1;
- if(qr <= mid) return query(ql, qr, l, mid, rt << 1);
- if(ql > mid) return query(ql, qr, mid + 1, r, rt << 1 | 1);
- return add(query(ql, qr, l, mid, rt << 1), query(ql, qr, mid + 1, r, rt << 1 | 1));
- }
- int main() {
- scanf("%d%d", &n, &m);
- scanf("%s", s + 1);
- build(1, n, 1);
- for(int i = 1; i <= m; i++) {
- int l, r; scanf("%d%d", &l, &r);
- node res = query(l, r, 1, n, 1);
- if(res.c[0][4] >= MAXN) puts("-1");
- else printf("%d\n", res.c[0][4]);
- }
- return 0;
- }
Codeforces750E. New Year and Old Subsequence (线段树维护DP)的更多相关文章
- Codeforces Round #271 (Div. 2) E题 Pillars(线段树维护DP)
题目地址:http://codeforces.com/contest/474/problem/E 第一次遇到这样的用线段树来维护DP的题目.ASC中也遇到过,当时也非常自然的想到了线段树维护DP,可是 ...
- codeforces Good bye 2016 E 线段树维护dp区间合并
codeforces Good bye 2016 E 线段树维护dp区间合并 题目大意:给你一个字符串,范围为‘0’~'9',定义一个ugly的串,即串中的子串不能有2016,但是一定要有2017,问 ...
- Codeforces Round #343 (Div. 2) D. Babaei and Birthday Cake 线段树维护dp
D. Babaei and Birthday Cake 题目连接: http://www.codeforces.com/contest/629/problem/D Description As you ...
- ZOJ-3349 Special Subsequence 线段树优化DP
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3349 题意:给定一个数列,序列A是一个满足|Ai-Ai-1| & ...
- Codeforces GYM 100114 D. Selection 线段树维护DP
D. Selection Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Descriptio ...
- 【BZOJ2164】采矿 树链剖分+线段树维护DP
[BZOJ2164]采矿 Description 浩浩荡荡的cg大军发现了一座矿产资源极其丰富的城市,他们打算在这座城市实施新的采矿战略.这个城市可以看成一棵有n个节点的有根树,我们把每个节点用1到n ...
- 【8.26校内测试】【重构树求直径】【BFS模拟】【线段树维护DP】
题目性质比较显然,相同颜色联通块可以合并成一个点,重新建树后,发现相邻两个点的颜色一定是不一样的. 然后发现,对于一条链来说,每次把一个点反色,实际上使点数少了2个.如下图 而如果一条链上面有分支,也 ...
- 2019牛客暑期多校训练营(第二场)E 线段树维护dp转移矩阵
题意 给一个\(n\times m\)的01矩阵,1代表有墙,否则没有,每一步可以从\(b[i][j]\)走到\(b[i+1][j]\),\(b[i][j-1]\),\(b[i][j+1]\),有两种 ...
- CodeForces833 B. The Bakery 线段树维护dp
题目链接:https://vjudge.net/problem/CodeForces-833B 题意:给长度为n的数组a,和一个整数k要求把数组分成连续的k段,每段的权值是该段中不同数的个数,输出最大 ...
随机推荐
- fatal error C1045: 编译器限制 : 链接规范嵌套太深
前言 我相信你是遇到了同样的问题.通过搜索引擎来到这里的.为了不耽误排查问题的时间,我提前说明一下这篇文章所描述的问题范畴: 我遇到的问题和 c++ 模板相关: 如果我减少传递的参数的话,是有可能避免 ...
- 获取微信Token值
/** * 获取Token值 * @param $corpid * @param $corpsecret * @return mixed * @author 宁佳兵 <meilijing.nin ...
- Qt开发的应用记录读取用户习惯设置的方法
Qt开发的应用记录读取用户习惯设置的方法 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/w ...
- 深入汇编指令理解Java关键字volatile
volatile是什么 volatile关键字是Java提供的一种轻量级同步机制.它能够保证可见性和有序性,但是不能保证原子性 可见性 对于volatile的可见性,先看看这段代码的执行 flag默认 ...
- 【Oracle】Oracle中chr()的含义
oracle中chr含义 CHR(10)和 CHR(13)--在oracle都为换行 chr(32)--表示空格 DECLARE v_a VARCHAR2(255); v_b VARCHAR2(255 ...
- 【Linux】linux中通过date命令获取昨天或明天时间的方法
date +"%F" 输出格式:2011-12-31 date +"%F %H:%M:%S" 输出格式:2011-12-31 16:29:50 这都是打印出系统 ...
- 这难道不是.NET5 的bug? 在线求锤?
hello,最近在对一个使用.NET5项目的认证授权系统进行重构,对.NET 5的授权中间件的源码有些看法. 也希望同学们能帮我理解. 一个朴素的需求 这是一个api项目,默认所有的api都需要授权, ...
- oracle dataguard搭建
搭建前环境准备 1.查看主库的oracle的uid和gid并在备库创建用户 # 主库查看oracle $ id oracle uid=54321(oracle) gid=54321(oinstall) ...
- 基于Asp.Net Core 5.0依赖Quartz.Net框架编写的任务调度web管理平台
源码地址: https://github.com/246850/Calamus.TaskScheduler 演示地址:http://47.101.47.193:1063/ 1.Quartz.NET框架 ...
- Zabbix监控虚拟机服务-告警与自动恢复-模板化
上一篇文章测试了服务的告警与自动恢复:Zabbix监控虚拟机服务-告警与自动恢复 但是我是直接为某一个主机增加的监控项和触发器, 如果要让某一个自定义的监控项和触发器被很多机器共用,则需要创建模板 1 ...