이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "bits/stdc++.h"
#define F first
#define S second
#define ll long long
#define pii pair<ll,ll>
const ll mxN = 5e5 + 5;
ll mod = 1e9 + 7;
using namespace std;
pii a[mxN];
ll compress[mxN];
ll seg[mxN * 4];
ll mn[mxN];
bool vis[mxN];
ll N,s,e;
ll combine(ll a,ll b) {return ((a * b) % mod);}
void update(ll ind,ll val){
    ind += N;
    seg[ind] += val;
    for(ind /= 2;ind;ind /= 2) seg[ind] = combine(seg[ind * 2],seg[ind * 2 + 1]);
}
ll query(ll l = 1,ll r = N,ll ind = 1){
    if(l > e || r < s) return 1;
    if(l >= s && r <= e) return seg[ind];
    ll md = (l + r)/ 2;
    return combine(query(l,md,ind * 2),query(md + 1,r,ind * 2 + 1));
}
void prllseg(){
    ll ex = 1;
    for(ll i = 1;i < N * 2;i++){
        cout<<seg[i]<<' ';
        if(ex * 2 - 1 == i){
            cout<<'\n';
            ex *= 2;
        }
    }
}
signed main(){
    memset(compress,-1,sizeof compress);
    ll n,k;
    cin >>n>>k>>mod;
    N = exp2(ceil(log2(k)));
    for(ll i = 0;i < n;i++){
        cin >>a[i].F>>a[i].S;
    }
    sort(a,a + n,greater<>());
    ll id = 0;
    for(ll i = 0;i < N;i++) update(i,1);
    for(ll i = 0;i < n;i++){
        if(compress[a[i].S] == -1){
            compress[a[i].S] = id++;
        }a[i].S = compress[a[i].S];
        update(a[i].S,1);
    }
    id = 0;
    ll ans = 0;
    for(ll i = 0;i < n;i++){
        ll num = 1;
        if(vis[a[i].S]) continue;
        vis[a[i].S] = 1;
        while(a[id].F * 2 > a[i].F && id < n){
            update(a[id].S,-1);
            // cout<<a[id].S<<" TEST\n"; 
            mn[a[id].S] = i;
            id++;
        }
        // prllseg();
        if(i == 0){
            ans = seg[1];
            // cout<<a[i].F<<' '<<a[i].S<<'\n';
            // cout<<ans<<'\n';
            continue;
        }
        s = a[i].S + 2,e = N;
        num = combine(query(),num);
        s = a[i].S + 1, e = a[i].S + 1;
        // cout<<mn[a[i].S]<<' '<<a[i].S<<'\n';
        if(mn[a[i].S] == i){
            num = combine(query(),num);
        }else{
            num = combine(query() - 1,num);
            ans += num;
            num = 1;
            s = a[mn[a[i].S]].S + 1,e = a[i].S;
            num = combine(query(),num);
            s = a[i].S + 2,e = N;
            num = combine(num,query());
            // cout<<num<<'\n';
        }
        ans += num;
        ans %= mod;
        // cout<<a[i].F<<' '<<a[i].S<<'\n';
    }
    cout<<ans<<'\n';
}
| # | 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... |