#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]+=v);
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+=mod+seg.query(1,ord[t]-1)*(seg.query(ord[t]+1,id)-1);
ans%=mod;
}
cout << ans;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 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 |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
98 ms |
6180 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
39 ms |
2748 KB |
Output is correct |
2 |
Correct |
55 ms |
3420 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 |
71 ms |
4176 KB |
Output is correct |
2 |
Incorrect |
123 ms |
6224 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
114 ms |
6560 KB |
Output is correct |
2 |
Correct |
115 ms |
6252 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
70 ms |
4332 KB |
Output is correct |
2 |
Correct |
117 ms |
6408 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
114 ms |
5968 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
126 ms |
6744 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
115 ms |
6336 KB |
Output is correct |
2 |
Correct |
134 ms |
9008 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
198 ms |
9916 KB |
Output is correct |
2 |
Correct |
158 ms |
7936 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
205 ms |
9812 KB |
Output is correct |
2 |
Correct |
182 ms |
8776 KB |
Output is correct |
3 |
Correct |
246 ms |
11088 KB |
Output is correct |
4 |
Correct |
201 ms |
8908 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
305 ms |
11092 KB |
Output is correct |
2 |
Correct |
399 ms |
16628 KB |
Output is correct |
3 |
Correct |
294 ms |
16724 KB |
Output is correct |
4 |
Correct |
361 ms |
15440 KB |
Output is correct |