• cf441 f组合数。。单调指针


    e没学过做不出来。。

    处理合法的区间很麻烦,但是处理非合法的区间很容易

    答案就是所有的取法-不合法的区间

    这题一定要双边界推进处理!!!!

    一开始用单边界向右推进,结果后来发现错了,拿样例1就可以证明

    所以先预处理出左边界和右边界

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<map>
    using namespace std;
    int L[250000];
    int R[250000];
    int pos[250000];
    int a[250000];
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            memset(L,0,sizeof(L));
            memset(R,0,sizeof(R));
            memset(pos,0,sizeof(pos));
            map<int,int>last;
            for(int i=1;i<=n;i++)scanf("%d",&a[i]);
            for(int i=1;i<=n;i++)
            {
                L[i]=last[a[i]];
                for(int j=0;j<=31;j++)
                {
                    if((a[i]&(1<<j))==0)
                    {
                        L[i]=max(L[i],pos[j]);
                    }
                }
                for(int j=0;j<=31;j++)
                {
                    if((a[i]&(1<<j))>0)pos[j]=i;
                }
                last[a[i]]=i;
            }
            for(int j=0;j<=31;j++)pos[j]=n+1;
            for(int i=n;i>=1;i--)
            {
                R[i]=n+1;
                for(int j=0;j<=31;j++)
                {
                    if((a[i]&(1<<j))==0)
                    {
                        R[i]=min(R[i],pos[j]);
                    }
                }
                for(int j=0;j<=31;j++)
                {
                    if((a[i]&(1<<j))>0)pos[j]=i;
                }
            }
            __int64 output=1ll*n*(n+1)/2;
            for(int i=1;i<=n;i++)
            {
                __int64 temp1=i-L[i];
                __int64 temp2=R[i]-i;
                output-=temp1*temp2;
            }
            printf("%I64d
    ",output);
        }
    }
  • 相关阅读:
    002.NFS相关配置项
    001.NFS简介
    002.DNS-BIND简介
    001.DNS原理及配置格式
    002.DHCP配置
    001.DHCP简介
    001.Chrony时间服务器
    博客开篇记载!
    【python-opencv】图像梯度
    【python-opencv】形态转换
  • 原文地址:https://www.cnblogs.com/zsben991126/p/10556067.html
Copyright © 2020-2023  润新知