qko的烦恼 牛客练习赛34

链接:https://ac.nowcoder.com/acm/contest/316/J
来源:牛客网
 

题解:官方给的。qwq  这个代码可能过不去,卡内存点,理论上代码就是这样,多交几次就能过。

代码:

#include <iostream>

using namespace std;
typedef long long ll;
const ll maxn=1e6+5;
const ll mod=1e9+7;
ll par[maxn];
ll n,m;
ll getfa(ll x){
    if(par[x]==x) return x;
    return par[x]=getfa(par[x]);
}

void init(){
    for(ll i=1;i<=n+1;i++)
        par[i]=i;
}
int main(){
    //ll n,m;
    cin>>n>>m;
    ll ans=1;
    /*for(ll i=1;i<=n+1;i++)
        par[i]=i;*/
    init();
    while(m--){
        ll l,r;
        cin>>l>>r;
        for(ll i=getfa(l);i<=r;i=getfa(i+1)){
            par[i]=i+1;
            n--;
        }
        ans=ans*n%mod;//ans%=mod;
    }
    cout<<ans<<endl;
    return 0;
}

题目描述


黄海同学最近迷上了黑白棋,而作为忠实挂件的qko则成为了黄海同学的陪练对象,黑白棋的规则很简单,初始旗子都是白色的,每一次操作黄海同学都能将[l,r]内的白色旗子变成黑色旗子(变黑以后就不能变白了咯!),每一次操作后黄海同学都会向qko询问剩下的白色旗子的个数 为了减少输出的规模 我们将每次询问后的值相乘后输出其在模1e9+7的答案

输入描述:

输入两个整数n(1<=n<=1000000),m(1<=m<=1000000),接下来输出m个区间[l,r],表示每次操作的区间,并且(1<=l<=r<=n)

输出描述:

输出一个数 表示每次操作后剩余白色节点的乘积在模1e9+7下的答案

示例1

输入

复制

10 3
3 3
5 7
2 8

输出

复制

162
posted @ 2018-12-15 19:30  UUUUh  阅读(248)  评论(0编辑  收藏  举报