답안 #1030752

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1030752 2024-07-22T09:29:09 Z huutuan Fish (IOI08_fish) C++14
16 / 100
359 ms 35924 KB
#include<bits/stdc++.h>

using namespace std;

int mod;

struct SegmentTree{
   int n;
   vector<int> t;
   void init(int _n){
      n=_n;
      t.assign(4*n+1, 1);
   }
   void update(int k, int l, int r, int pos, int val){
      if (l==r){
         t[k]+=val;
         return;
      }
      int mid=(l+r)>>1;
      if (pos<=mid) update(k<<1, l, mid, pos, val);
      else update(k<<1|1, mid+1, r, pos, val);
      t[k]=t[k<<1]*t[k<<1|1]%mod;
   }
   int get(int k, int l, int r, int L, int R){
      if (r<L || R<l) return 1;
      if (L<=l && r<=R) return t[k];
      int mid=(l+r)>>1;
      return get(k<<1, l, mid, L, R)*get(k<<1|1, mid+1, r, L, R);
   }
} st;

const int N=5e5+10;
int n, m, mx[N], pos[N], b[N];
vector<int> v[N];
pair<int, int> a[N];

int32_t main(){
   ios_base::sync_with_stdio(false);
   cin.tie(nullptr);
   cin >> n >> m >> mod;
   for (int i=1; i<=n; ++i) cin >> a[i].first >> a[i].second;
   sort(a+1, a+n+1);
   for (int i=1; i<=n; ++i) mx[a[i].second]=i, v[a[i].second].push_back(a[i].first);
   for (int i=1, j=1; i<=n; ++i) if (mx[a[i].second]==i){
      pos[a[i].second]=j;
      b[j]=a[i].second;
      ++j;
   }
   st.init(m);
   int ans=0;
   for (int i=1, j=0; i<=n; ++i){
      while (j<n && a[j+1].first*2<=a[i].first){
         ++j;
         st.update(1, 1, m, pos[a[j].second], 1);
      }
      if (mx[a[i].second]==i){
         int p1=1, p2=1;
         p1=st.get(1, 1, m, 1, pos[a[i].second]-1);
         int cnt=st.get(1, 1, m, pos[a[i].second], pos[a[i].second])-1;
         p2=p1;
         int l=pos[a[i].second]+1, r=m;
         while (l<=r){
            int mid=(l+r)>>1;
            int cc=upper_bound(v[a[i].second].begin(), v[a[i].second].end(), a[mx[b[mid]]].first/2)-v[a[i].second].begin();
            if (cc<=cnt) l=mid+1;
            else r=mid-1;
         }
         p2=p2*st.get(1, 1, m, pos[a[i].second]+1, r)%mod;
         p1=p1*cnt%mod;
         ans=(ans+p1+p2)%mod;
      }
   }
   cout << ans << '\n';
   return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 12120 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 12120 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 12124 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 12124 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 12124 KB Output is correct
2 Incorrect 6 ms 12124 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 12124 KB Output is correct
2 Incorrect 117 ms 24588 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 5 ms 12120 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 6 ms 12124 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 47 ms 17508 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 12380 KB Output is correct
2 Correct 7 ms 12380 KB Output is correct
3 Incorrect 7 ms 12380 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 77 ms 20560 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 109 ms 24932 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 71 ms 20820 KB Output is correct
2 Incorrect 139 ms 25972 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 130 ms 25284 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 138 ms 27216 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 116 ms 25168 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 268 ms 32144 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 206 ms 31056 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 359 ms 35924 KB Output isn't correct
2 Halted 0 ms 0 KB -