# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
777103 |
2023-07-08T16:36:48 Z |
salmon |
Fish (IOI08_fish) |
C++14 |
|
507 ms |
34408 KB |
#include <bits/stdc++.h>
using namespace std;
int N,M;
int mod;
int l,h;
vector<pair<int,int>> v;
vector<pair<int,int>> oh;
bool usable[500100];
int mapping[500100];
bool o[500100];
int iv[500100];
struct node{
int s,e,m;
long long int v;
node *l,*r;
node(int S, int E){
s = S;
e = E;
m = (s + e)/2;
v = 1;
if(s != e){
l = new node(s,m);
r = new node(m + 1, e);
}
}
void update(int i, int k){
if(s == e){
v += k;
v %= mod;
return;
}
if(i <= m){
l -> update(i,k);
}
else{
r -> update(i,k);
}
v = (l -> v * r -> v) % mod;
}
long long int query(int S, int E){
if(E < S) return 1;
if(S <= s && e <= E){
return v;
}
long long int V = 1;
if(S <= m){
V *= l -> query(S,E);
}
if(m < E){
V *= r -> query(S,E);
}
return V % mod;
}
}*lroot;
int main(){
scanf(" %d",&N);
scanf(" %d",&M);
scanf(" %d",&mod);
int next[500100];
for(int i = 1; i <= M; i++){
next[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>>());
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;
iv[v[i].second] = v[i].first;
}
else if(v[i].first * 2 > iv[v[i].second]){
next[v[i].second] = v[i].first;
}
}
lroot = new node(0,M);
int it = 0;
int it1 = 0;
reverse(oh.begin(),oh.end());
for(int i = 0; i < oh.size(); i++){
mapping[oh[i].second] = i;
}
reverse(oh.begin(),oh.end());
reverse(v.begin(),v.end());
long long int bigans = 0;
M = oh.size();
for(int i = 0; i < N; i++){
while(it != N && v[i].first >= v[it].first * 2){
lroot -> update(mapping[v[it].second], 1);
it++;
}
if(v[i] == oh.back()){
usable[oh.back().second] = true;
bigans += lroot -> query(0,M - oh.size());
printf("v: %d %d\n",lroot -> query(0,M - oh.size()),bigans);
bigans %= mod;
printf("%d %d\n",next[v[i].second],v[i].second);
if(next[v[i].second] == -1){
pair<int,int> f = *lower_bound(oh.begin(),oh.end(),make_pair(v[i].first * 2 - 1, 1100100100),greater<pair<int,int>>());
//printf("%d %d\n",mapping[v[i].second],mapping[f.second]);
//printf("g: %d\n",(lroot -> query(mapping[v[i].second] + 1, mapping[f.second] ) - 1));
bigans += (lroot -> query(0,mapping[v[i].second] - 1)) * (lroot -> query(mapping[v[i].second] + 1, mapping[f.second] ) - 1);
}
else{
int e = lower_bound(oh.begin(),oh.end(),make_pair(next[v[i].second] * 2 - 1, 1100100100),greater<pair<int,int>>()) -> second;
//printf("%d\n",(lroot -> query(0,mapping[v[i].second] - 1)) * (lroot -> query(mapping[v[i].second] + 1, mapping[e] ) - 1));
bigans += (lroot -> query(0,mapping[v[i].second] - 1)) * (lroot -> query(mapping[v[i].second] + 1, mapping[e] ) - 1);
}
//bigans += lroot -> query(1,v[i].second - 1) * (long long int) lroot -> query(v[i].second + 1, M);
bigans %= mod;
//printf("s %d %d\n",v[i].first,bigans);
oh.pop_back();
}
}
printf("%d",bigans);
}
/*
*
5
3
700
8 3
7 2
4 1
2 3
2 2
5
3
7
2 2
5 1
8 3
4 1
2 3
3 500 200
1 2
2 1
2 2
*
*/
Compilation message
fish.cpp: In function 'int main()':
fish.cpp:98:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
98 | for(int i = 0; i < v.size(); i++){
| ~~^~~~~~~~~~
fish.cpp:116:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
116 | for(int i = 0; i < oh.size(); i++){
| ~~^~~~~~~~~~~
fish.cpp:139:17: warning: format '%d' expects argument of type 'int', but argument 2 has type 'long long int' [-Wformat=]
139 | printf("v: %d %d\n",lroot -> query(0,M - oh.size()),bigans);
| ~^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| int long long int
| %lld
fish.cpp:139:20: warning: format '%d' expects argument of type 'int', but argument 3 has type 'long long int' [-Wformat=]
139 | printf("v: %d %d\n",lroot -> query(0,M - oh.size()),bigans);
| ~^ ~~~~~~
| | |
| int long long int
| %lld
fish.cpp:167:11: warning: format '%d' expects argument of type 'int', but argument 2 has type 'long long int' [-Wformat=]
167 | printf("%d",bigans);
| ~^ ~~~~~~
| | |
| | long long int
| int
| %lld
fish.cpp:112:6: warning: unused variable 'it1' [-Wunused-variable]
112 | int it1 = 0;
| ^~~
fish.cpp:72:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
72 | scanf(" %d",&N);
| ~~~~~^~~~~~~~~~
fish.cpp:73:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
73 | scanf(" %d",&M);
| ~~~~~^~~~~~~~~~
fish.cpp:75:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
75 | scanf(" %d",&mod);
| ~~~~~^~~~~~~~~~~~
fish.cpp:86:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
86 | scanf(" %d",&l);
| ~~~~~^~~~~~~~~~
fish.cpp:87:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
87 | scanf(" %d",&h);
| ~~~~~^~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
1 ms |
2260 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
1 ms |
2260 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
1 ms |
2260 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
1 ms |
2260 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
1 ms |
2260 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
1 ms |
2260 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
2 ms |
2260 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
3 ms |
2388 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
62 ms |
4896 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
3 ms |
2516 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
108 ms |
7084 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
166 ms |
7056 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
100 ms |
6972 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
181 ms |
8088 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
203 ms |
9272 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
179 ms |
13124 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
372 ms |
27500 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
338 ms |
26416 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
507 ms |
34408 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |