#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
int n,k,mod;
const int N=(1<<19);
int fre[500001],vis[500001],curr=1,curr2=1,ans=0,mx[500001];
array<int,2> arr[500001];
int Tree[N*2+5][2];
void update(int i,int u,int val){
    i+=N;
    val%=mod;
    Tree[i][u]=val;
    i/=2;
    while(i!=0){
        Tree[i][u]=(Tree[i*2+1][u]*Tree[i*2][u])%mod;
        i/=2;
    }
    curr=Tree[1][0];
    curr2=Tree[1][1];
    return;
}
void ins(int i){
    fre[i]++;
    update(i,0,fre[i]);
    update(i,1,fre[i]);
    return;   
}
void ers(int i){
    fre[i]--;
    if(vis[i]==0) update(i,1,fre[i]);
    update(i,0,fre[i]);
    return;   
}
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cin>>n>>k>>mod;
    memset(Tree,1,sizeof Tree);
    for(int tp=1;tp<=k;tp++) fre[tp]=1;
    for(int i=0;i<n;i++){
        cin>>arr[i][0]>>arr[i][1];
        ins(arr[i][1]);
    }
    sort(arr,arr+n);
    curr2=curr;
    int lst=n-1;
    for(int i=n-1;i>=0;i--){
        while(lst>=0&&arr[lst][0]*2>arr[i][0]){
            ers(arr[lst][1]);
            lst--;
        }
        if(vis[arr[i][1]]==1) continue;
        vis[arr[i][1]]=1;
        if(i==n-1){
            for(int tp=1;tp<=k;tp++) mx[tp]=fre[tp];
        }
        if(i!=n-1&&fre[arr[i][1]]==mx[arr[i][1]]){
            update(arr[i][1],0,1);
            ans+=curr;
            update(arr[i][1],0,fre[arr[i][1]]);
            ans%=mod;
        }
        ans+=curr2;
        ans%=mod;
        update(arr[i][1],1,1);
    }
    cout<<ans<<endl;
    return 0;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |