首页 > 其他分享 >Interval(20年牛客多校5)

Interval(20年牛客多校5)

时间:2023-05-04 20:56:35浏览次数:66  
标签:cnt 20 int ll Interval 牛客 const leqslant define

传送门

题意

有一个数列 \(A(0\leqslant A_i\lt2^{30})\) 长度为 \(N(1\leqslant N\leqslant10^5)\),

\(F(l,r):=A_l\&A_{l+1}\&\cdots\&A_r\),

\(S(l,r):=\left\{F(a,b)|\min(l,r)\leqslant a\leqslant b\leqslant\max(l,r)\right\}\),

有 \(Q(1\leqslant Q\leqslant10^5)\) 组询问,对于给定的 \(L,R(1\leqslant L',R'\leqslant N)\),求 \(S(L,R)\) 的大小,强制在线。

思路

考虑到固定一个右端点,左端点向左拓展的时候,\(F(l,r)\) 的个数不会很多,最多只有 \(\log\) 个,于是我们就可以用二分预处理出所有的值。由于需要保留上一个版本的答案,所以我们需要拿一颗主席树来维护,第 \(i\) 个版本的线段树中第 \(j\) 个位置记录的是 \(F(j,i)\) 是否对答案有贡献,这样就涉及了去重的这个问题。一个常见的技巧是对于一个值,只记录离第 \(i\) 个位置最近的那个位置,并将之前的位置删去,这样就可以保证一个值只被算一次了,所以这道题就被转换成了主席树上单点修改,区间查询。

代码

#include<bits/stdc++.h>
using namespace std;

#define ll long long
#define fi first
#define se second
const double eps=1e-12;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const double pi=acos(-1.0);
int dcmp(double x){if(fabs(x)<eps)return 0;return x>0?1:-1;}

#define int ll

struct president_segment_tree
{
    int cnt=0;
    int root[100005];
    struct node
    {
        int l,r,sum;
    }z[100005*600];
    int clone(int x)
    {
        cnt++;z[cnt]=z[x];
        return cnt;
    }
    void update(int id1,int &id2,int l,int r,int x,int w)
    {
        id2=clone(id1);
        z[id2].sum+=w;
        if(l==r)return;
        else
        {
            int mid=(l+r)>>1;
            if(x<=mid)update(z[id1].l,z[id2].l,l,mid,x,w);
            else update(z[id1].r,z[id2].r,mid+1,r,x,w);
        }
    }
    int query(int id,int l,int r,int x,int y)
    {
//        cout<<"query "<<id<<' '<<l<<' '<<r<<' '<<x<<' '<<y<<' '<<z[id].sum<<'\n';
        if(x<=l&&r<=y)return z[id].sum;
        else
        {
            int mid=(l+r)>>1;
            int ans=0;
            if(x<=mid)ans+=query(z[id].l,l,mid,x,y);
            if(mid<y)ans+=query(z[id].r,mid+1,r,x,y);
            return ans;
        }
    }
}pst;
int a[100005];
struct segment_tree
{
    int tree[100005<<2];
    void build(int p,int l,int r)
    {
        if(l==r)tree[p]=a[l];
        else
        {
            int mid=(l+r)>>1;
            build(p<<1,l,mid);
            build(p<<1|1,mid+1,r);
            tree[p]=tree[p<<1]&tree[p<<1|1];
        }
    }
    int query(int p,int l,int r,int x,int y)
    {
        if(x<=l&&r<=y)return tree[p];
        else
        {
            int mid=(l+r)>>1;
            int ans=(1<<30)-1;
            if(x<=mid)ans&=query(p<<1,l,mid,x,y);
            if(mid<y)ans&=query(p<<1|1,mid+1,r,x,y);
            return ans;
        }
    }
}st;
map<int,int>last;

void solve()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    st.build(1,1,n);
    for(int i=1;i<=n;i++)
    {
//        cout<<i<<":\n";
        pst.root[i]=pst.root[i-1];
        if(last.count(a[i]))
            pst.update(pst.root[i],pst.root[i],1,n,last[a[i]],-1);
        last[a[i]]=i;
        pst.update(pst.root[i],pst.root[i],1,n,last[a[i]],1);
        int cur=a[i];
        while(true)
        {
            int l=0,r=i,res=0;
            while(l<r)
            {
                int mid=(l+r+1)>>1;
                int now=st.query(1,1,n,mid,i);
                if(now<cur)l=mid,res=mid;
                else r=mid-1;
            }
            if(!res)break;
            cur=st.query(1,1,n,res,i);
//            cout<<cur<<' '<<l<<' '<<i<<'\n';
            if(last.count(cur))
                pst.update(pst.root[i],pst.root[i],1,n,last[cur],-1);
            last[cur]=res;
            pst.update(pst.root[i],pst.root[i],1,n,last[cur],1);
        }
//        cout<<'\n';
    }
    int q;
    cin>>q;
    int lastans=0;
    while(q--)
    {
        int l,r;
        cin>>l>>r;
        l=(l^lastans)%n+1;
        r=(r^lastans)%n+1;
        if(l>r)swap(l,r);
        cout<<(lastans=pst.query(pst.root[r],1,n,l,n))<<'\n';
    }
}

/*

*/

#undef int

int main()
{
    ios::sync_with_stdio(false);cin.tie(nullptr);
//    cout<<fixed<<setprecision(15);



//    int _;cin>>_;while(_--)
    {
        solve();
    }
    return 0;
}

标签:cnt,20,int,ll,Interval,牛客,const,leqslant,define
From: https://www.cnblogs.com/Jerry-Black/p/17372473.html

相关文章

  • Exp6 MSF应用基础 20202211王宏韬
    目录1基础问题回答2实验总结与体会3离实践缺少什么4实践过程记录主动攻击实践针对浏览器攻击针对adobe客户端攻击应用辅助模块tcp端口扫描   1基础问题回答 exploit:利用发现的安全漏洞或配置弱点对靶机进行攻击,将payload发送给靶机。payload:植入靶机......
  • 青岛市程序设计竞赛冲刺⑦(2022市北区程序设计竞赛小学组试题)
    1.2的N次方原题: 解题思路:送分题,找规律,不妨看出,有2,4,8,6的规律,直接运算即可AC代码:#include<bits/stdc++.h>#definelllonglongusingnamespacestd;intx;//0<x<1000000000²»ÓÃÌØÅÐ0µÄÇé¿öintmain(){ freopen("count.in","r",stdin); freopen("......
  • Exp6 MSF应用基础 20201331黄文刚
    Exp6MSF应用基础一、实验原理(1)MSF简介Metasploit是一个免费的、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数百个已知软件漏洞的专业级漏洞攻击工具。(2)程序特点这种可以扩展的模型将负载控制,编码器,无操作生成器和漏洞整合在一起,使M......
  • 从功能测试转型测试开发,薪资涨了20K,1000字讲述转型必经之路...
    身处职场之中,犹如逆水行舟不进则退,想要不被后浪拍死在沙滩上,就要不断学习新知识,接受新事物。要得到更好的发展,就要紧跟发展趋势,不断转型才能保持竞争力,在职场中占有一席之地。转型不是一件容易的事,涉及到转型、革新,就要突破现有的框架,必然会经历阵痛。我刚工作时就是一名月薪40......
  • Exp6 MSF应用基础-20201324
    目录1实践内容1.0安装靶机1.1一个主动攻击实践,尽量使用最新的类似漏洞;主动攻击实践MS08-0671.2一个针对浏览器的攻击,尽量使用最新的类似漏洞;1.2.1针对浏览器的攻击ms06_013_createtextrange1.2.2针对浏览器的攻击MS14-0641.3一个针对客户端的攻击,如Adobe或office,尽量使用最......
  • 2023冲刺清北营12
    T1出题人由于\(a\)序列中存在偶数的情况很容易构造,下面分析前提为\(a\)序列的所有数为奇数。假设当前我们已知序列\(b\),对于\(b_i,b_j\),如果存在\(k\)满足\(a_k=b_i+b_j\),那么连接\(i,j\)所对应的点,由于点数为\(n\),边数至少为\(n\),因此原图中至少存在一个环......
  • 2023AAAI_Ultra-High-Definition Low-Light Image Enhancement: A Benchmark and Tran
    一.motivition1.之前的数据集分辨率较低二.contribution1.提出两个超高清数据集UHD-4k和UHD-8k2.网络结构LLFormer(网络结构类似2022CVPR_Restormer:EffificientTransformerforHigh-ResolutionImageRestoration.)三.Network 网络架构类似于:2022CVPR_Restormer:......
  • 【2023-04-28】连岳摘抄
    23:59在这个过程中,我算是饱尝了人间的辛酸,但回过头去想想,当伙计的那六年是非常宝贵的,尽管那六年我一直重复地干着几乎没有多少技术含量的活儿,但我很清楚,那就是我的工作,是需要我认真对待、努力实践的工作。这个觉悟影响了我一生,让我无论做什么,都能百分百地投入、去实践,而不是空想......
  • 2023年5月4日周四
    计划删减代码,把它变成自己的,准备答辩学习前端知识angular框架,html语法扎实的学,css,JavaScript学习后端框架,Java语言学扎实点知道接口怎么回事,尝试或明白一个接口怎么写解决配置文件中resources中的几千个报错,不解决,无意义要搞明白数据库中的字段含义,以了解数据库表如......
  • 2024届雷达专业秋招找工作复习指南
    公众号【调皮连续波】2023年度会员内容更新公告(04.09)序号类别内容文件路径1雷达书籍雷达数据处理专项(21+本)根目录\雷达书籍库2雷达书籍雷达技术百科全书根目录\雷达书籍库【正文】编辑|  调皮哥的小助理     审核|调皮哥声明:本文为调皮哥个人见解,仅供参考,产生的一切......