# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
1104050 |
2024-10-22T15:52:00 Z |
_rain_ |
Fish (IOI08_fish) |
C++14 |
|
526 ms |
52456 KB |
#include<bits/stdc++.h>
using namespace std;
#define name "main"
typedef long long ll;
const int N = (int)5e5;
struct Node{
int len;
int gem;
bool operator < (const Node& other) const{
return len < other.len;
}
} p[N+2];
int n,k,MOD;
int add(int a , int b){
return a + b >= MOD ? a + b - MOD : a + b;
}
int sub(int a,int b){
return a - b < 0 ? a - b + MOD : a - b;
}
int mul(int a, int b){
return (ll)a*b%MOD;
}
int id[N+2];
bool last[N+2]={},vis[N+2]={};
int b[N+2],c[N+2];
vector<int> bag[N+2];
int st[N*4+2];
#define lef(id) id*2
#define rig(id) id*2+1
void build(int id,int l,int r){
if (l==r) st[id]=1;
else{
int m=l+r>>1;
build(lef(id),l,m);
build(rig(id),m+1,r);
st[id]=1;
}
return;
}
void upd(int id,int l,int r,int pos,int t){
if (l>pos||r<pos) return;
if (l==r){
st[id] = add(st[id],t);
}
else{
int m=l+r>>1;
if (l<=m) upd(lef(id),l,m,pos,t);
if (m<r) upd(rig(id),m+1,r,pos,t);
st[id]=mul(st[lef(id)],st[rig(id)]);
}
return;
}
int Get(int id,int l,int r,int u,int v){
if (l>v||r<u) return 1;
if (u<=l&&r<=v) return st[id];
int m=l+r>>1;
return mul(Get(lef(id),l,m,u,v),Get(rig(id),m+1,r,u,v));
}
int32_t main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>>n>>k>>MOD;
for (int i = 1; i <= n; ++i){
cin>>p[i].len>>p[i].gem;
}
sort(p+1,p+n+1);
int cnt=0;
for (int i = n; i >= 1; --i){
if (!vis[p[i].gem]) {
last[i] = true;
vis[p[i].gem] = true;
}
}
for (int i = 1; i <= n;++i){
if (last[i]) {
id[p[i].gem]=++cnt;
b[cnt]=p[i].len;
}
bag[p[i].gem].push_back(p[i].len);
}
build(1,1,cnt);
int ans=0;
for (int i = 1 , l = 1; i <= n; ++i){
while (l<=i&&p[l].len*2<=p[i].len){
upd(1,1,cnt,id[p[l].gem],1);
c[p[l].gem]=add(c[p[l].gem],1);
++l;
}
if (last[i]){
int l=id[p[i].gem]+1,r=cnt;
int x=p[i].gem;
while(l<=r){
int m=l+r>>1;
int lime=upper_bound(bag[x].begin(),bag[x].end(),b[m]/2)-bag[x].begin();
if (lime<=c[x]) l=m+1;
else r=m-1;
}
ans = add(ans,mul(Get(1,1,cnt,1,id[x]-1),add(Get(1,1,cnt,id[x]+1,l-1),c[x])));
}
}
cout<<ans;
exit(0);
}
Compilation message
fish.cpp: In function 'void build(int, int, int)':
fish.cpp:35:10: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
35 | int m=l+r>>1;
| ~^~
fish.cpp: In function 'void upd(int, int, int, int, int)':
fish.cpp:48:10: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
48 | int m=l+r>>1;
| ~^~
fish.cpp: In function 'int Get(int, int, int, int, int)':
fish.cpp:58:9: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
58 | int m=l+r>>1;
| ~^~
fish.cpp: In function 'int32_t main()':
fish.cpp:97:12: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
97 | int m=l+r>>1;
| ~^~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
18768 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
18936 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
18936 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
19056 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
18768 KB |
Output is correct |
2 |
Correct |
4 ms |
18768 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
18768 KB |
Output is correct |
2 |
Correct |
118 ms |
30956 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
18768 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
19024 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
47 ms |
24640 KB |
Output is correct |
2 |
Correct |
64 ms |
25408 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
18948 KB |
Output is correct |
2 |
Incorrect |
5 ms |
18900 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
80 ms |
26848 KB |
Output is correct |
2 |
Incorrect |
144 ms |
31552 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
133 ms |
31732 KB |
Output is correct |
2 |
Correct |
136 ms |
32584 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
75 ms |
27496 KB |
Output is correct |
2 |
Incorrect |
143 ms |
32348 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
141 ms |
31560 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
154 ms |
35656 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
117 ms |
33100 KB |
Output is correct |
2 |
Correct |
148 ms |
37948 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
281 ms |
37344 KB |
Output is correct |
2 |
Correct |
228 ms |
33608 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
283 ms |
36424 KB |
Output is correct |
2 |
Correct |
266 ms |
38108 KB |
Output is correct |
3 |
Correct |
317 ms |
40384 KB |
Output is correct |
4 |
Correct |
277 ms |
37996 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
364 ms |
40008 KB |
Output is correct |
2 |
Correct |
526 ms |
51620 KB |
Output is correct |
3 |
Correct |
391 ms |
52456 KB |
Output is correct |
4 |
Correct |
498 ms |
48868 KB |
Output is correct |