답안 #1019463

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1019463 2024-07-10T21:27:53 Z ttamx Fish (IOI08_fish) C++17
95 / 100
436 ms 16768 KB
#include<bits/stdc++.h>

using namespace std;

const int N=5e5+5;
const int K=1<<20;

int n,k,mod;
pair<int,int> a[N];
int b[N],ord[N],last[N],nxt[N];
bool ok[N];
int cnt,ans;

struct SegTree{
    int t[K];
    void build(int l,int r,int i){
        t[i]=1;
        if(l==r)return;
        int m=(l+r)/2;
        build(l,m,i*2);
        build(m+1,r,i*2+1);
    }
    void build(){
        build(1,k,1);
    }
    void update(int l,int r,int i,int x,int v){
        if(x<l||r<x)return;
        if(l==r)return void(t[i]=(t[i]+v)%mod);
        int m=(l+r)/2;
        update(l,m,i*2,x,v);
        update(m+1,r,i*2+1,x,v);
        t[i]=t[i*2]*t[i*2+1]%mod;
    }
    void update(int x,int v){
        update(1,k,1,x,v);
    }
    int query(int l,int r,int i,int x,int y){
        if(y<l||r<x)return 1;
        if(x<=l&&r<=y)return t[i];
        int m=(l+r)/2;
        return query(l,m,i*2,x,y)*query(m+1,r,i*2+1,x,y)%mod;
    }
    int query(int x,int y){
        return query(1,k,1,x,y);
    }
}seg;

int main(){
    cin.tie(nullptr)->sync_with_stdio(false);
    cin >> n >> k >> mod;
    for(int i=1;i<=n;i++)cin >> a[i].first >> a[i].second;
    sort(a+1,a+n+1);
    cnt=k;
    for(int i=n;i>=1;i--){
        auto [l,t]=a[i];
        if(!ord[t]){
            b[cnt]=l;
            ord[t]=cnt;
            last[t]=l;
            ok[i]=true;
            cnt--;
        }
        nxt[i]=last[t];
        last[t]=l;
    }
    seg.build();
    for(int i=1,j=1;i<=n;i++)if(ok[i]){
        auto [l,t]=a[i];
        while(j<=n&&l>=a[j].first*2){
            int x=a[j].second;
            seg.update(ord[x],1);
            last[x]=nxt[j];
            j++;
        }
        int id=lower_bound(b+1,b+k+1,last[t]*2)-b-1;
        ans+=seg.query(1,ord[t]);
        ans+=seg.query(1,ord[t]-1)*(seg.query(ord[t]+1,id)-1);
        ans%=mod;
    }
    cout << ans;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 109 ms 6200 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 46 ms 2792 KB Output is correct
2 Correct 59 ms 3412 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 2 ms 348 KB Output is correct
3 Correct 2 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 72 ms 4036 KB Output is correct
2 Correct 128 ms 6224 KB Output is correct
3 Correct 142 ms 13012 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 148 ms 6736 KB Output is correct
2 Correct 120 ms 6228 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 66 ms 4180 KB Output is correct
2 Correct 126 ms 6480 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 122 ms 5968 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 134 ms 6920 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 123 ms 6224 KB Output is correct
2 Correct 134 ms 8784 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 209 ms 9808 KB Output is correct
2 Correct 172 ms 7912 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 213 ms 9812 KB Output is correct
2 Correct 187 ms 8784 KB Output is correct
3 Correct 256 ms 11088 KB Output is correct
4 Correct 212 ms 8788 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 285 ms 11192 KB Output is correct
2 Correct 436 ms 16768 KB Output is correct
3 Correct 300 ms 16720 KB Output is correct
4 Correct 331 ms 15732 KB Output is correct