// incorrect/maroon-spfa.cpp
#include <bits/stdc++.h>
#include <type_traits>
#include "walk.h"
using namespace std;
using ll = int64_t;
#define FOR(i, a, b) for (int i = int(a); i < int(b); i++)
#define REP(i, b) FOR(i, 0, b)
#define MP make_pair
#define PB push_back
#define EB emplace_back
#define ALL(x) x.begin(), x.end()
auto &errStream = cerr;
#ifdef LOCAL
#define cerr (cerr << "-- line " << __LINE__ << " -- ")
#else
class CerrDummy
{
} cerrDummy;
template <class T>
CerrDummy &operator<<(CerrDummy &cd, const T &)
{
return cd;
}
using charTDummy = char;
using traitsDummy = char_traits<charTDummy>;
CerrDummy &operator<<(CerrDummy &cd, basic_ostream<charTDummy, traitsDummy> &(basic_ostream<charTDummy, traitsDummy> &))
{
return cd;
}
#define cerr cerrDummy
#endif
#define REACH cerr << "reached" << endl
#define DMP(x) cerr << #x << ":" << x << endl
#define ZERO(x) memset(x, 0, sizeof(x))
#define ONE(x) memset(x, -1, sizeof(x))
using pi = pair<int, int>;
using vi = vector<int>;
using ld = long double;
template <class T, class U>
ostream &operator<<(ostream &os, const pair<T, U> &p)
{
os << "(" << p.first << "," << p.second << ")";
return os;
}
template <class T>
ostream &operator<<(ostream &os, const vector<T> &v)
{
os << "{";
REP(i, (int)v.size())
{
if (i)
os << ",";
os << v[i];
}
os << "}";
return os;
}
ll read()
{
ll i;
scanf("%" SCNd64, &i);
return i;
}
void printSpace()
{
printf(" ");
}
void printEoln()
{
printf("\n");
}
void print(ll x, int suc = 1)
{
printf("%" PRId64, x);
if (suc == 1)
printEoln();
if (suc == 2)
printSpace();
}
string readString()
{
static char buf[3341000];
scanf("%s", buf);
return string(buf);
}
char *readCharArray()
{
static char buf[3341000];
static int bufUsed = 0;
char *ret = buf + bufUsed;
scanf("%s", ret);
bufUsed += strlen(ret) + 1;
return ret;
}
template <class T, class U>
void chmax(T &a, U b)
{
if (a < b)
a = b;
}
template <class T, class U>
void chmin(T &a, U b)
{
if (b < a)
a = b;
}
template <class T>
T Sq(const T &t)
{
return t * t;
}
const ll infLL = LLONG_MAX / 3;
#ifdef int
const int inf = infLL;
#else
const int inf = INT_MAX / 2 - 100;
#endif
namespace Subtask4
{
ll Solve(vi x, vi h, vi l, vi r, vi y, int s, int g)
{
int n = x.size();
REP(k, 2)
{
int w = k == 0 ? s : g;
vector<pi> p{pi(h[w], w)}, q{pi(h[w], w)};
for (int i = w - 1; i >= 0; i--)
if (h[i] > p.back().first)
p.EB(h[i], i);
for (int i = w + 1; i < n; i++)
if (h[i] > q.back().first)
q.EB(h[i], i);
vi ll, rr, yy;
REP(i, l.size())
{
if (l[i] < w && w < r[i])
{
int a, b;
{
auto itr = lower_bound(ALL(p), pi(y[i], -1));
assert(itr != p.end());
a = itr->second;
}
{
auto itr = lower_bound(ALL(q), pi(y[i], -1));
assert(itr != q.end());
b = itr->second;
}
if (l[i] < a)
{
ll.PB(l[i]);
rr.PB(a);
yy.PB(y[i]);
}
if (a < b)
{
ll.PB(a);
rr.PB(b);
yy.PB(y[i]);
}
if (b < r[i])
{
ll.PB(b);
rr.PB(r[i]);
yy.PB(y[i]);
}
}
else
{
ll.PB(l[i]);
rr.PB(r[i]);
yy.PB(y[i]);
}
}
l = ll;
r = rr;
y = yy;
}
int m = l.size();
vector<pi> posYX{pi(0, x[s]), pi(0, x[g])};
{
vector<tuple<int, int, int>> xty;
REP(i, m)
{
xty.EB(x[l[i]], 0, y[i]);
xty.EB(x[r[i]], 1, -y[i]);
}
sort(ALL(xty));
multiset<int> ys;
for (auto q : xty)
{
int j = get<0>(q), t = get<1>(q), i = get<2>(q) * (t == 0 ? 1 : -1);
posYX.EB(i, j);
auto itr = ys.lower_bound(i);
if (itr != ys.begin())
{
--itr;
posYX.EB(*itr, j);
}
if (t == 0)
ys.insert(i);
else
ys.erase(ys.find(i));
}
sort(ALL(posYX));
posYX.erase(unique(ALL(posYX)), posYX.end());
}
const auto Idx = [&](int i, int j) {
return lower_bound(ALL(posYX), pi(i, j)) - posYX.begin();
};
int vs = posYX.size();
vector<vector<pi>> graph(vs);
const auto AddEdge = [&](int a, int b, int c) {
graph[a].EB(b, c);
graph[b].EB(a, c);
};
REP(i, m)
{
int k = Idx(y[i], x[l[i]]);
while (k + 1 < int(posYX.size()) && posYX[k + 1] <= pi(y[i], x[r[i]]))
{
AddEdge(k, k + 1, posYX[k + 1].second - posYX[k].second);
k++;
}
}
vector<pi> posXY = posYX;
for (auto &p : posXY)
swap(p.first, p.second);
sort(ALL(posXY));
REP(i, vs - 1)
{
if (posXY[i].first == posXY[i + 1].first)
{
AddEdge(Idx(posXY[i].second, posXY[i].first), Idx(posXY[i + 1].second, posXY[i + 1].first), posXY[i + 1].second - posXY[i].second);
}
}
vector<ll> dist(vs, infLL);
using pli = tuple<ll, int>;
//priority_queue<pli, vector<pli>, greater<pli>> pq;
queue<pli> pq;
const auto Reach = [&](int v, ll d) {
if (dist[v] > d)
{
dist[v] = d;
pq.push(pli(d, v));
}
};
Reach(Idx(0, x[s]), 0);
while (!pq.empty())
{
int v;
ll d;
//tie(d, v) = pq.top();
tie(d,v)=pq.front();
pq.pop();
if (dist[v] != d)
continue;
for (auto e : graph[v])
Reach(e.first, dist[v] + e.second);
}
return dist[Idx(0, x[g])] == infLL ? -1 : dist[Idx(0, x[g])];
}
} // namespace Subtask4
long long min_distance(std::vector<int> X, std::vector<int> H, std::vector<int> L, std::vector<int> R, std::vector<int> Y, int S, int G)
{
return Subtask4::Solve(X, H, L, R, Y, S, G);
}
Compilation message
walk.cpp: In function 'll read()':
walk.cpp:70:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%" SCNd64, &i);
~~~~~^~~~~~~~~~~~~~~~
walk.cpp: In function 'std::__cxx11::string readString()':
walk.cpp:96:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%s", buf);
~~~~~^~~~~~~~~~~
walk.cpp: In function 'char* readCharArray()':
walk.cpp:105:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%s", ret);
~~~~~^~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
2 ms |
256 KB |
Output is correct |
3 |
Correct |
2 ms |
376 KB |
Output is correct |
4 |
Correct |
2 ms |
256 KB |
Output is correct |
5 |
Correct |
2 ms |
376 KB |
Output is correct |
6 |
Correct |
2 ms |
376 KB |
Output is correct |
7 |
Correct |
2 ms |
380 KB |
Output is correct |
8 |
Correct |
2 ms |
376 KB |
Output is correct |
9 |
Correct |
2 ms |
376 KB |
Output is correct |
10 |
Correct |
2 ms |
376 KB |
Output is correct |
11 |
Correct |
2 ms |
256 KB |
Output is correct |
12 |
Correct |
2 ms |
256 KB |
Output is correct |
13 |
Correct |
2 ms |
376 KB |
Output is correct |
14 |
Correct |
2 ms |
376 KB |
Output is correct |
15 |
Correct |
2 ms |
376 KB |
Output is correct |
16 |
Correct |
2 ms |
256 KB |
Output is correct |
17 |
Correct |
2 ms |
376 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
256 KB |
Output is correct |
2 |
Correct |
2 ms |
376 KB |
Output is correct |
3 |
Execution timed out |
4030 ms |
37564 KB |
Time limit exceeded |
4 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
114 ms |
9120 KB |
Output is correct |
2 |
Correct |
869 ms |
44272 KB |
Output is correct |
3 |
Correct |
951 ms |
45440 KB |
Output is correct |
4 |
Correct |
1287 ms |
46392 KB |
Output is correct |
5 |
Correct |
1040 ms |
49268 KB |
Output is correct |
6 |
Correct |
900 ms |
45424 KB |
Output is correct |
7 |
Correct |
701 ms |
24780 KB |
Output is correct |
8 |
Correct |
318 ms |
22640 KB |
Output is correct |
9 |
Correct |
856 ms |
42356 KB |
Output is correct |
10 |
Correct |
311 ms |
25496 KB |
Output is correct |
11 |
Correct |
16 ms |
1528 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
114 ms |
9120 KB |
Output is correct |
2 |
Correct |
869 ms |
44272 KB |
Output is correct |
3 |
Correct |
951 ms |
45440 KB |
Output is correct |
4 |
Correct |
1287 ms |
46392 KB |
Output is correct |
5 |
Correct |
1040 ms |
49268 KB |
Output is correct |
6 |
Correct |
900 ms |
45424 KB |
Output is correct |
7 |
Correct |
701 ms |
24780 KB |
Output is correct |
8 |
Correct |
318 ms |
22640 KB |
Output is correct |
9 |
Correct |
856 ms |
42356 KB |
Output is correct |
10 |
Correct |
311 ms |
25496 KB |
Output is correct |
11 |
Correct |
16 ms |
1528 KB |
Output is correct |
12 |
Correct |
831 ms |
45032 KB |
Output is correct |
13 |
Correct |
678 ms |
44792 KB |
Output is correct |
14 |
Correct |
947 ms |
49272 KB |
Output is correct |
15 |
Correct |
707 ms |
39288 KB |
Output is correct |
16 |
Correct |
924 ms |
41060 KB |
Output is correct |
17 |
Correct |
1176 ms |
46704 KB |
Output is correct |
18 |
Correct |
651 ms |
39128 KB |
Output is correct |
19 |
Correct |
1082 ms |
40924 KB |
Output is correct |
20 |
Correct |
439 ms |
23536 KB |
Output is correct |
21 |
Correct |
41 ms |
3064 KB |
Output is correct |
22 |
Correct |
499 ms |
36108 KB |
Output is correct |
23 |
Correct |
442 ms |
34908 KB |
Output is correct |
24 |
Correct |
352 ms |
27304 KB |
Output is correct |
25 |
Correct |
477 ms |
32156 KB |
Output is correct |
26 |
Correct |
291 ms |
21928 KB |
Output is correct |
27 |
Correct |
1012 ms |
49116 KB |
Output is correct |
28 |
Correct |
675 ms |
44056 KB |
Output is correct |
29 |
Correct |
982 ms |
45676 KB |
Output is correct |
30 |
Correct |
747 ms |
25456 KB |
Output is correct |
31 |
Correct |
976 ms |
42260 KB |
Output is correct |
32 |
Execution timed out |
4018 ms |
24708 KB |
Time limit exceeded |
33 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
2 ms |
256 KB |
Output is correct |
3 |
Correct |
2 ms |
376 KB |
Output is correct |
4 |
Correct |
2 ms |
256 KB |
Output is correct |
5 |
Correct |
2 ms |
376 KB |
Output is correct |
6 |
Correct |
2 ms |
376 KB |
Output is correct |
7 |
Correct |
2 ms |
380 KB |
Output is correct |
8 |
Correct |
2 ms |
376 KB |
Output is correct |
9 |
Correct |
2 ms |
376 KB |
Output is correct |
10 |
Correct |
2 ms |
376 KB |
Output is correct |
11 |
Correct |
2 ms |
256 KB |
Output is correct |
12 |
Correct |
2 ms |
256 KB |
Output is correct |
13 |
Correct |
2 ms |
376 KB |
Output is correct |
14 |
Correct |
2 ms |
376 KB |
Output is correct |
15 |
Correct |
2 ms |
376 KB |
Output is correct |
16 |
Correct |
2 ms |
256 KB |
Output is correct |
17 |
Correct |
2 ms |
376 KB |
Output is correct |
18 |
Correct |
2 ms |
256 KB |
Output is correct |
19 |
Correct |
2 ms |
376 KB |
Output is correct |
20 |
Execution timed out |
4030 ms |
37564 KB |
Time limit exceeded |
21 |
Halted |
0 ms |
0 KB |
- |