zoukankan      html  css  js  c++  java
  • Luogu_CF750E New Year and Old Subsequence

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    const int N=200010;
    const int INF=1e9;
    char s[N];
    struct Node{
    	int m[5][5];
    	Node operator + (Node x){
    		Node ans;
    		for(int i=0;i<5;i++)
    			for(int j=i;j<5;j++){
    				ans.m[i][j]=INF;
    				for(int k=i;k<=j;k++)ans.m[i][j]=min(ans.m[i][j],m[i][k]+x.m[k][j]);
    			}
    		return ans;
    	}
    }a[N<<2];
    
    void build(int l,int r,int o){
    	if(l==r){
    		for(int i=0;i<5;i++)
    			for(int j=0;j<5;j++)
    				if(i==j)a[o].m[i][j]=0;
    				else a[o].m[i][j]=INF;
    		if(s[l]=='2')a[o].m[0][0]=1,a[o].m[0][1]=0;
    		if(s[l]=='0')a[o].m[1][1]=1,a[o].m[1][2]=0;
    		if(s[l]=='1')a[o].m[2][2]=1,a[o].m[2][3]=0;
    		if(s[l]=='7')a[o].m[3][3]=1,a[o].m[3][4]=0;
    		if(s[l]=='6')a[o].m[4][4]=1,a[o].m[3][3]=1;
    		return;
    	}
    	int mid=l+r>>1;
    	build(l,mid,o*2); build(mid+1,r,o*2+1);
    	a[o]=a[o*2]+a[o*2+1];
    }
    
    Node quire(int o,int L,int R,int l,int r){
    	if(l<=L&&R<=r)return a[o];
    	int mid=L+R>>1;
    	if(mid<l)return quire(o*2+1,mid+1,R,l,r);
    	if(mid>=r)return quire(o*2,L,mid,l,r);
    	return quire(o*2,L,mid,l,r)+quire(o*2+1,mid+1,R,l,r);
    }
    
    int main(){
    	int n,q;
    	while(scanf("%d%d
    %s",&n,&q,s+1)!=EOF){
    		build(1,n,1);
    		while(q--){
    			int l,r;
    			scanf("%d%d",&l,&r);
    			int ans=quire(1,1,n,l,r).m[0][4];
    			if(ans==INF)puts("-1");
    			else printf("%d
    ",quire(1,1,n,l,r).m[0][4]);
    		}
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    c coroutine
    leveldb(ssdb)性能、使用场景评估
    [微信协议分析] 多媒体
    [微信协议分析] 多点登陆
    [微信协议分析] 文本消息
    paxos(chubby) vs zab(Zookeeper)
    分布式一致性算法
    erlang 健壮性
    tcp 出现rst情况整理
    tcp_tw_reuse、tcp_tw_recycle 使用场景及注意事项
  • 原文地址:https://www.cnblogs.com/codetogether/p/13453603.html
Copyright © 2011-2022 走看看