# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
776576 | salmon | Fish (IOI08_fish) | C++14 | 3069 ms | 12364 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
int N,M;
int mod;
int l,h;
vector<pair<int,int>> v;
int main(){
scanf(" %d",&N);
scanf(" %d",&M);
scanf(" %d",&mod);
int mep[500100];
int mepu[500100];
bool usable[M + 1];
for(int i = 1; i <= M; i++){
mep[i] = -1;
mepu[i] = -1;
}
for(int i = 0; i <= M; i++) usable[i] = false;
for(int i = 0; i < N; i++){
scanf(" %d",&l);
scanf(" %d",&h);
v.push_back(make_pair(l,h));
}
sort(v.begin(),v.end(),greater<pair<int,int>>());
bool o[500100];
set<int> smol;
vector<pair<int,int>> oh;
for(int i = 0; i <= M; i++){
o[i] = true;
}
for(int i = 0; i < v.size(); i++){
if(o[v[i].second]){
oh.push_back(v[i]);
o[v[i].second] = false;
}
}
int it = 0;
reverse(v.begin(),v.end());
int bigans = 0;
vector<pair<int,int>> tempuse;
for(int i = 0; i < N; i++){
while(it != N && v[i].first >= v[it].first * 2){
if(usable[v[it].second]){
if(mep[v[it].second] == -1){
mep[v[it].second] = 1;
}
else{
mep[v[it].second]++;
}
it++;
}
else{
if(mepu[v[it].second] == -1){
mepu[v[it].second] = 1;
}
else{
mepu[v[it].second]++;
}
it++;
}
}
if(v[i] == oh.back()){
if(mepu[oh.back().second] != -1){
mep[oh.back().second] = mepu[oh.back().second];
}
usable[oh.back().second] = true;
long long int ans = 1;
for(int i = 1; i <= M; i++){
if(mep[i] != -1){
ans = ans * (mep[i] + 1) % mod;
}
}
bigans += ans;
bigans %= mod;
oh.pop_back();
long long int sub = 1;
ans = 1;
for(int j = 0; j < oh.size(); j++){
if(oh[j].first < v[i].first * 2){
bool flag = false;
for(int k = it; k < i; k++){
if(oh[j].first >= v[k].first * 2 && v[k].second == v[i].second) flag = true;
}
if(flag) continue;
if(mepu[oh[j].second] != -1){
ans *= (1 + mepu[oh[j].second]);
ans %= mod;
}
}
}
ans %= mod;
sub %= mod;
for(int j = 1; j <= M; j++){
if(mep[j] != -1 && j != v[i].second){
ans = ans * (mep[j] + 1) % mod;
sub = sub * (mep[j] + 1) % mod;
}
}
ans -= sub;
ans =(ans + mod) % mod;
bigans += ans;
bigans %= mod;
//printf("%d %d %d %d\n",v[i].first,bigans,ans,sub);
}
}
printf("%d",bigans);
}
/*
*
5
3
700
8 3
7 2
4 1
2 3
2 2
*
*/
Compilation message (stderr)
# | 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... |