“经典”问题
题号:NC237670
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给定一个序列,m 次查询区间的 mex 值,mex 表示最小的没出现过的自然数,。显然可以使用经典算法轻易解决这个经典问题。

现在蒟蒻 djy 魔改了一下它,给定一个 0n-1 的排列,m 次查询区间的 mex 值,但是 n,m 变大了,你能帮帮他吗?

,输入数据在程序内生成。

输入描述:

第一行两个整数 $n,m$。

下面给出数据生成模板。

int a[10000001],c[10000002][2],n,m;
unsigned int rd;
inline int rnd(int mod,int seed)
{
    rd^=(1<<13);
    rd^=(rd>>7);
    rd^=(rd<<20);
    rd^=(rd>>3);
    rd^=(rd<<10);
    rd^=(rd<<5);
    rd^=(1<<2);
    return rd%mod+seed;
}
// 生成序列 a
void make_sequence()
{
    for(int i=1;i<=n;i++)
    {
        a[i]=i-1;
    }
    for(int i=1;i<=n;i++)
    {
        swap(a[i],a[rnd(n,1)]);
    }
}
// 生成一个询问,表示查询区间 [l,r] 的 mex 
pair<int,int> make_query()
{
    int l=rnd(n,1);
    int r=rnd(n+1-l,l);
    return make_pair(l,r);
}


输出描述:

一行一个整数为所有询问答案的异或和。
示例1

输入

复制
5 6

输出

复制
6