zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    软件工程(2019)第二次作业
    软件工程(2019)第一次作业
    【Java基础】字面量相加的类型转换
    测试之合作篇
    功能测试之难以重现的bug
    功能测试知识之Web输入框验证
    如何编写有效的测试用例?
    Java:switch语句例子
    【转】成功的概念
    Java里的if else嵌套语句例子
  • 原文地址:https://www.cnblogs.com/xyq0220/p/13302148.html
Copyright © 2011-2022 走看看