• 2020牛客暑期多校训练营(第二场)G-Greater and Greater bitset


    题意

    给一个大小为(n)的序列(A)和一个大小为(m)的序列(B),问(A)中有多少大小为(m)的子段(S)满足(forall iin {1,2,dots,m },S_ige B_i)

    分析

    (A)中每个位置开一个(bitset<m>g) 记录(B)中哪些位置是满足条件的,就可以通过位运算(s=(g_i>>1& s)<<1)来转移得到当前(A)中第(i)位能匹配到(B)中哪些位置,如果(s[m]==1),表示找到了一个子段满足条件。对(A)的每个位置开(bitset)会炸内存,可以先将(A,B)分别排序,然后双指针来预处理(bitset),能发现(bitset)最多有(m)种,空间就只需要(m*m/64)

    Code

    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<iomanip>
    #include<sstream>
    #include<cstdio>
    #include<string>
    #include<vector>
    #include<bitset>
    #include<queue>
    #include<cmath>
    #include<stack>
    #include<set>
    #include<map>
    #define rep(i,x,n) for(int i=x;i<=n;i++)
    #define per(i,n,x) for(int i=n;i>=x;i--)
    #define sz(a) int(a.size())
    #define rson mid+1,r,p<<1|1
    #define pii pair<int,int>
    #define lson l,mid,p<<1
    #define ll long long
    #define pb push_back
    #define mp make_pair
    #define se second
    #define fi first
    using namespace std;
    const double eps=1e-8;
    const int mod=1e9+7;
    const int N=1e5+10;
    const int inf=1e9;
    int n,m;
    int a[N],b[N],c[N],d[N],pos[N],tot;
    bitset<40010>g[40010];
    int main(){
    	//ios::sync_with_stdio(false);
    	//freopen("in","r",stdin);
    	scanf("%d%d",&n,&m);
    	rep(i,1,n){
    		scanf("%d",&a[i]);
    		c[i]=i;
    	}
    	rep(i,1,m){
    		scanf("%d",&b[i]);
    		d[i]=i;
    	}
    	sort(c+1,c+n+1,[](int x,int y){return a[x]<a[y];});
    	sort(d+1,d+m+1,[](int x,int y){return b[x]<b[y];});
    	int now=1;
    	bitset<40010>pig;
    	g[0]=pig;
    	rep(i,1,n){
    		int flag=0;
    		while(a[c[i]]>=b[d[now]]&&now<=m){
    			pig.set(d[now++]);
    			flag=1;
    		}
    		if(flag) g[++tot]=pig;
    		pos[c[i]]=tot;
    	}
    	bitset<40010>s;
    	s.set(0);
    	int ans=0;
    	rep(i,1,n){
    		s=(g[pos[i]]>>1&s)<<1;
    		if(s[m]) ans++;
    		s.set(0);
    	}
    	printf("%d
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    Math Jax开源数学编辑器的使用
    阿里云pai项目使用说明
    tomcat管理授权:tomcat-users.xml
    NoSQLBooster for MongoDB的基本使用
    IDEA的配置文件访问
    task
    Netty基础点滴
    二星权限树的设计与实现
    easyui实现树形菜单Tab功能、layout布局
    如何用Dome4j(2.2.1)创建Xml
  • 原文地址:https://www.cnblogs.com/xyq0220/p/13302148.html
Copyright © 2020-2023  润新知