#include<bits/stdc++.h>
using namespace std;
#define ld long double
#define int long long
#define EPS (ld)(1e-14)
#define vt vector
int K,M;
struct line {
ld m;
ld c;
line() {}
line(ld a, ld b) {
m = a;
c = b;
}
};
ld interx(line a, line b) {
ld res = (ld)(b.c - a.c) / (ld)(a.m - b.m);
return res;
}
struct {
vt<line> emb;
vt<pair<ld, line>> sta;
void push(line g) {
emb.push_back(g);
}
bool bye(pair<ld, line> g, line h) {
ld cut = g.first;
if(interx(g.second, h) <= cut) {
return true;
}
return false;
}
void solve() {
sort(begin(emb), end(emb), [](line a, line b) {return a.m > b.m; });
for(line curr: emb) {
while(sta.size() and bye(sta.back(), curr)) {
sta.pop_back();
}
ld ccut = -1e10;
if(sta.size()) {
ccut = interx(curr, sta.back().second);
}
if(ccut <= 1e18) sta.push_back({ccut, curr});
}
// cerr << "Yep done\n";
}
bool query(ld x, ld maxy) {
auto lb = lower_bound(begin(sta), end(sta), x,
[](pair<ld, line> a, ld q) {
return a.first < q;
}
); //BUG: Upper bound was so much more weird compared to lower bound
//Otherwise code was good, trust your code.
assert(lb != begin(sta));
lb = prev(lb);
line now = lb->second;
return (now.m * (ld)x + now.c) <= (ld)maxy;
}
} cht;
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> K >> M;
for(int i = 1; i <= K; i++) {
int xp, yp;
cin >> xp >> yp;
cht.push(line(-xp, yp));
}
cht.solve();
for(int g = 1; g <= M; g++) {
int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2;
ld m = (ld)(y2 - y1) / (ld)(x2 - x1);
ld b = -m * (ld)x1 + (ld)y1;
// cerr << m << ' ' << b << '\n';
bool res = cht.query(m, b);
if(res) {
cout << "Y\n";
} else {
cout << "N\n";
}
}
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
1 ms |
344 KB |
Output isn't correct |
2 |
Correct |
1 ms |
344 KB |
Output is correct |
3 |
Incorrect |
17 ms |
1500 KB |
Output isn't correct |
4 |
Correct |
37 ms |
4808 KB |
Output is correct |
5 |
Correct |
83 ms |
9412 KB |
Output is correct |
6 |
Incorrect |
50 ms |
6356 KB |
Output isn't correct |
7 |
Incorrect |
58 ms |
5328 KB |
Output isn't correct |
8 |
Incorrect |
50 ms |
5588 KB |
Output isn't correct |
9 |
Incorrect |
56 ms |
4820 KB |
Output isn't correct |
10 |
Incorrect |
62 ms |
5588 KB |
Output isn't correct |