题目描述

A string tt is called nice if a string "2017" occurs in tt as a subsequence but a string "2016" doesn't occur in tt as a subsequence. For example, strings "203434107" and "9220617" are nice, while strings "20016", "1234" and "20167" aren't nice.

The ugliness of a string is the minimum possible number of characters to remove, in order to obtain a nice string. If it's impossible to make a string nice by removing characters, its ugliness is -1−1 .

Limak has a string ss of length nn , with characters indexed 11 through nn . He asks you qq queries. In the ii-th query you should compute and print the ugliness of a substring (continuous subsequence) of ssstarting at the index a_{i}ai​ and ending at the index b_{i}bi​ (inclusive).

输入输出格式

输入格式:

The first line of the input contains two integers nn and qq ( 4<=n<=2000004<=n<=200000 , 1<=q<=2000001<=q<=200000 ) — the length of the string ss and the number of queries respectively.

The second line contains a string ss of length nn . Every character is one of digits '0'–'9'.

The ii -th of next qq lines contains two integers a_{i}ai​ and b_{i}bi​ ( 1<=a_{i}<=b_{i}<=n1<=ai​<=bi​<=n ), describing a substring in the ii -th query.

输出格式:

For each query print the ugliness of the given substring.

输入输出样例

输入样例#1:

8 3
20166766
1 8
1 7
2 8
输出样例#1:

4
3
-1
输入样例#2:

15 5
012016662091670
3 4
1 14
4 15
1 13
10 15
输出样例#2:

-1
2
1
-1
-1
输入样例#3:

4 2
1234
2 4
1 2
输出样例#3:

-1
-1

说明

In the first sample:

  • In the first query, ugliness(ugliness( "20166766" )=4)=4 because all four sixes must be removed.
  • In the second query, ugliness(ugliness( "2016676" )=3)=3 because all three sixes must be removed.
  • In the third query, ugliness(ugliness( "0166766" )=-1)=−1 because it's impossible to remove some digits to get a nice string.

In the second sample:

  • In the second query, ugliness(ugliness( "01201666209167" )=2)=2 . It's optimal to remove the first digit '2' and the last digit '6', what gives a string "010166620917", which is nice.
  • In the third query, ugliness(ugliness( "016662091670" )=1)=1 . It's optimal to remove the last digit '6', what gives a nice string "01666209170".

-------------------------------------------------------------------

这是一个大坑

先把代码丢在这里,改天详细写个题解 233333

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define N 200100
#define INF 1e9
#define lc (p<<1)
#define rc (p<<1|1)
using namespace std;
int n,m;
char s[N];
struct node
{
int a[][];
node(){
for(int i=;i<;i++)
for(int j=;j<;j++)
a[i][j]=INF;
}
}T[N<<];
char ch[]={'','','','',''};
int find (char x)//返回数字本身的愚蠢办法
{
for(int i=;i<;i++)
if(x==ch[i]) return i;
return -;
}
node pushup(node &a,node &b){
node res;
for(int i=;i<;i++)
for(int j=i;j<;j++)
for(int k=i;k<=j;k++)
res.a[i][j]=min(res.a[i][j],a.a[i][k]+b.a[k][j]);
return res;
}
void build(int p,int l,int r)
{
if(l==r)
{
int f=find(s[l]);
for(int i=;i<;i++)
T[p].a[i][i]=;//初始化——隔壁有更好的方法 //以下为转移方程初始化
if(f!=-&&f<)//l的值为2 0 1 7
{
T[p].a[f][f+]=;
T[p].a[f][f]=;
}
else if(f==)//l为6
T[p].a[][]=T[p].a[][]=;
return;
}
int mid=(l+r)>>;
build(lc,l,mid);
build(rc,mid+,r);
T[p]=pushup(T[lc],T[rc]);
}
node query(int p,int l,int r,int ql,int qr)
{
if(ql==l&&qr==r)
return T[p];
int mid=(l+r)>>;
if(qr<=mid) return query(lc,l,mid,ql,qr);
if(ql>mid) return query(rc,mid+,r,ql,qr);
else
{
node tmpl=query(lc,l,mid,ql,mid);
node tmpr=query(rc,mid+,r,mid+,qr);
return pushup(tmpl,tmpr);
}
}
int main()
{
scanf("%d%d",&n,&m);
scanf("%s",s+);
build(,,n);
while(m--)
{
int l,r;
scanf("%d%d",&l,&r);
int ans=query(,,n,l,r).a[][];
if(ans==INF) printf("-1\n");
else printf("%d\n",ans);
}
return ;
}

CF750E 线段树+矩阵乘矩阵加的更多相关文章

  1. 「模板」 线段树——区间乘 && 区间加 && 区间求和

    「模板」 线段树--区间乘 && 区间加 && 区间求和 原来的代码太恶心了,重贴一遍. #include <cstdio> int n,m; long l ...

  2. UOJ#299. 【CTSC2017】游戏 线段树 概率期望 矩阵

    原文链接www.cnblogs.com/zhouzhendong/p/UOJ299.html 前言 不会概率题的菜鸡博主做了一道概率题. 写完发现运行效率榜上的人都没有用心卡常数——矩阵怎么可以用数组 ...

  3. ZOJ - 2671 Cryptography(线段树+求区间矩阵乘积)

    题意:已知n个矩阵(下标从1开始),求下标x~y区间矩阵的乘积.最多m次询问,n ( 1 <= n <= 30,000) and m ( 1 <= m <= 30,000). ...

  4. poj 3468 A Simple Problem with Integers (线段树 成段更新 加值 求和)

    题目链接 题意: 只有这两种操作 C a b c" means adding c to each of Aa, Aa+1, ... , Ab. -10000 ≤ c ≤ 10000.&quo ...

  5. POJ 3468 A Simple Problem with Integers(线段树功能:区间加减区间求和)

    题目链接:http://poj.org/problem?id=3468 A Simple Problem with Integers Time Limit: 5000MS   Memory Limit ...

  6. hdu 5068 线段树维护矩阵乘积

    http://acm.hdu.edu.cn/showproblem.php?pid=5068 题意给的略不清晰 m个询问:从i层去j层的方法数(求连段乘积)或者修改从x层y门和x+1层z门的状态反转( ...

  7. Codeforces Round #337 (Div. 2) D. Vika and Segments 线段树 矩阵面积并

    D. Vika and Segments     Vika has an infinite sheet of squared paper. Initially all squares are whit ...

  8. BZOJ 4085 丧心病狂的毒瘤题目 线段树+矩乘

    思路: 一眼矩阵快速幂 再用线段树维护一下矩阵就完了... 我hhhhh    哎我还是too young,too simple 入了这个大坑 线段树维护9个值 以上 如果A+1   转移矩阵是这个样 ...

  9. bzoj1018[SHOI2008]堵塞的交通traffic——线段树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1018 巧妙的线段树.维护矩阵四个角的连通性. 考虑两个点连通的可能路径分成3部分:两点左边. ...

随机推荐

  1. python-day1作业(感谢视频老师留的作业)

    __author__ = 'zht' #!/usr/bin/env python # -*- coding: utf-8 -*- ''' #努力学习每一天 ''' #尝试次数计数器 tries = 0 ...

  2. 微信成为HTML5技术流行的最大推手

    很多热点的事件都是厚积薄发,HTML5就是如此.此前iOS和Android系统已经放弃了Flash,这让HTML5有了一个天然的成长基础.而现在手机硬件的提升和HTML5本身的完善,使得基于HTML5 ...

  3. cmd_ping命令

    ping命令是网络命令里的核心命令,同时也是黑客入侵的基础命令.下面和大家分享一下ping命令的基础知识和一般用法. 以ping百度公司域名为例,介绍ping命令相关内容. 一.ping命令基础知识 ...

  4. 多段图动态规划dp

    多段图问题是DP的基础题目.大体的意思是有一个赋权有向图,其顶点集被分为几个子集.求经过每个子集从源点到终点的最短路径 import java.util.ArrayList; import java. ...

  5. 用指针的方式实现,重写strrchr函数的功能

    char *strchrTest(char * ptr,char c); Action(){ char str[]={"thisisadog"}; char c='s'; lr_o ...

  6. Raid 6与raid 5的区别

    RAID5和RAID6有下面几个区别: 1.冗余和数据恢复能力 RAID组级别 冗余及数据恢复能力 数据恢复策略 RAID 5 存在分散在不同条带上的奇偶校验数据 允许一块数据盘故障,并可通过奇偶校验 ...

  7. ios基础学习

    action中调用函数方法别忘了冒号1. 各个视图之间的关系要分辨清楚 2. MVC (Model-View-Controller). In this pattern, models keep tra ...

  8. $|^|\z|\Z|/a|/l

    #!/usr/bin/perl use strict; use warnings; foreach(<>) { if (/(\w*)/a){print "$1\n";} ...

  9. 安装IAR ewarm

    一  安装准备 (ST方案) 1 嵌入式集成开发环境IAR ewarm 5.41 2 J-Link4.20 3 emberznet-4.3.0协议栈安装包 option1:tools - stm32软 ...

  10. 使用struts2实现文件上传与下载功能

    这个问题做了两天,在网上找了很多例子,但是还有一些功能没有实现,暂时先把代码贴出来,以后在做这方面的功能时在修改 文件上传: 一开始我在网上找到基于servlet+jsp环境写的文件上传,但是在将页面 ...