QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#75440 | #5463. Range Closest Pair of Points Query | yosupo | AC ✓ | 8514ms | 479272kb | C++20 | 40.5kb | 2023-02-05 10:41:39 | 2023-02-05 10:41:40 |
Judging History
answer
#pragma GCC target("avx,avx2")
//#pragma GCC optimize("Ofast")
//#undef LOCAL
#include <unistd.h>
#include <algorithm>
#include <array>
#include <cassert>
#include <cctype>
#include <cstring>
#include <sstream>
#include <string>
#include <type_traits>
#include <vector>
namespace yosupo {
namespace internal {
int ceil_pow2(int n) {
int x = 0;
while ((1U << x) < (unsigned int)(n)) x++;
return x;
}
} // namespace internal
int bsf(unsigned int n) { return __builtin_ctz(n); }
int bsf(unsigned long n) { return __builtin_ctzl(n); }
int bsf(unsigned long long n) { return __builtin_ctzll(n); }
int bsf(unsigned __int128 n) {
unsigned long long low = (unsigned long long)(n);
unsigned long long high = (unsigned long long)(n >> 64);
return low ? __builtin_ctzll(low) : 64 + __builtin_ctzll(high);
}
int bsr(unsigned int n) {
return 8 * (int)sizeof(unsigned int) - 1 - __builtin_clz(n);
}
int bsr(unsigned long n) {
return 8 * (int)sizeof(unsigned long) - 1 - __builtin_clzl(n);
}
int bsr(unsigned long long n) {
return 8 * (int)sizeof(unsigned long long) - 1 - __builtin_clzll(n);
}
int bsr(unsigned __int128 n) {
unsigned long long low = (unsigned long long)(n);
unsigned long long high = (unsigned long long)(n >> 64);
return high ? 127 - __builtin_clzll(high) : 63 - __builtin_ctzll(low);
}
int popcnt(unsigned int n) { return __builtin_popcount(n); }
int popcnt(unsigned long n) { return __builtin_popcountl(n); }
int popcnt(unsigned long long n) { return __builtin_popcountll(n); }
} // namespace yosupo
#include <cassert>
#include <numeric>
#include <type_traits>
namespace yosupo {
namespace internal {
template <class T>
using is_signed_int128 =
typename std::conditional<std::is_same<T, __int128_t>::value ||
std::is_same<T, __int128>::value,
std::true_type,
std::false_type>::type;
template <class T>
using is_unsigned_int128 =
typename std::conditional<std::is_same<T, __uint128_t>::value ||
std::is_same<T, unsigned __int128>::value,
std::true_type,
std::false_type>::type;
template <class T>
using make_unsigned_int128 =
typename std::conditional<std::is_same<T, __int128_t>::value,
__uint128_t,
unsigned __int128>;
template <class T>
using is_integral =
typename std::conditional<std::is_integral<T>::value ||
internal::is_signed_int128<T>::value ||
internal::is_unsigned_int128<T>::value,
std::true_type,
std::false_type>::type;
template <class T>
using is_signed_int = typename std::conditional<(is_integral<T>::value &&
std::is_signed<T>::value) ||
is_signed_int128<T>::value,
std::true_type,
std::false_type>::type;
template <class T>
using is_unsigned_int =
typename std::conditional<(is_integral<T>::value &&
std::is_unsigned<T>::value) ||
is_unsigned_int128<T>::value,
std::true_type,
std::false_type>::type;
template <class T>
using to_unsigned = typename std::conditional<
is_signed_int128<T>::value,
make_unsigned_int128<T>,
typename std::conditional<std::is_signed<T>::value,
std::make_unsigned<T>,
std::common_type<T>>::type>::type;
template <class T>
using is_integral_t = std::enable_if_t<is_integral<T>::value>;
template <class T>
using is_signed_int_t = std::enable_if_t<is_signed_int<T>::value>;
template <class T>
using is_unsigned_int_t = std::enable_if_t<is_unsigned_int<T>::value>;
template <class T> using to_unsigned_t = typename to_unsigned<T>::type;
} // namespace internal
} // namespace yosupo
namespace yosupo {
struct Scanner {
public:
Scanner(const Scanner&) = delete;
Scanner& operator=(const Scanner&) = delete;
Scanner(FILE* fp) : fd(fileno(fp)) { line[0] = 127; }
void read() {}
template <class H, class... T> void read(H& h, T&... t) {
bool f = read_single(h);
assert(f);
read(t...);
}
int read_unsafe() { return 0; }
template <class H, class... T> int read_unsafe(H& h, T&... t) {
bool f = read_single(h);
if (!f) return 0;
return 1 + read_unsafe(t...);
}
int close() { return ::close(fd); }
private:
static constexpr int SIZE = 1 << 15;
int fd = -1;
std::array<char, SIZE + 1> line;
int st = 0, ed = 0;
bool eof = false;
bool read_single(std::string& ref) {
if (!skip_space()) return false;
ref = "";
while (true) {
char c = top();
if (c <= ' ') break;
ref += c;
st++;
}
return true;
}
bool read_single(double& ref) {
std::string s;
if (!read_single(s)) return false;
ref = std::stod(s);
return true;
}
template <class T,
std::enable_if_t<std::is_same<T, char>::value>* = nullptr>
bool read_single(T& ref) {
if (!skip_space<50>()) return false;
ref = top();
st++;
return true;
}
template <class T,
internal::is_signed_int_t<T>* = nullptr,
std::enable_if_t<!std::is_same<T, char>::value>* = nullptr>
bool read_single(T& sref) {
using U = internal::to_unsigned_t<T>;
if (!skip_space<50>()) return false;
bool neg = false;
if (line[st] == '-') {
neg = true;
st++;
}
U ref = 0;
do {
ref = 10 * ref + (line[st++] & 0x0f);
} while (line[st] >= '0');
sref = neg ? -ref : ref;
return true;
}
template <class U,
internal::is_unsigned_int_t<U>* = nullptr,
std::enable_if_t<!std::is_same<U, char>::value>* = nullptr>
bool read_single(U& ref) {
if (!skip_space<50>()) return false;
ref = 0;
do {
ref = 10 * ref + (line[st++] & 0x0f);
} while (line[st] >= '0');
return true;
}
bool reread() {
if (ed - st >= 50) return true;
if (st > SIZE / 2) {
std::memmove(line.data(), line.data() + st, ed - st);
ed -= st;
st = 0;
}
if (eof) return false;
auto u = ::read(fd, line.data() + ed, SIZE - ed);
if (u == 0) {
eof = true;
line[ed] = '\0';
u = 1;
}
ed += int(u);
line[ed] = char(127);
return true;
}
char top() {
if (st == ed) {
bool f = reread();
assert(f);
}
return line[st];
}
template <int TOKEN_LEN = 0> bool skip_space() {
while (true) {
while (line[st] <= ' ') st++;
if (ed - st > TOKEN_LEN) return true;
if (st > ed) st = ed;
for (auto i = st; i < ed; i++) {
if (line[i] <= ' ') return true;
}
if (!reread()) return false;
}
}
};
struct Printer {
public:
template <char sep = ' ', bool F = false> void write() {}
template <char sep = ' ', bool F = false, class H, class... T>
void write(const H& h, const T&... t) {
if (F) write_single(sep);
write_single(h);
write<true>(t...);
}
template <char sep = ' ', class... T> void writeln(const T&... t) {
write<sep>(t...);
write_single('\n');
}
Printer(FILE* _fp) : fd(fileno(_fp)) {}
~Printer() { flush(); }
int close() {
flush();
return ::close(fd);
}
void flush() {
if (pos) {
auto res = ::write(fd, line.data(), pos);
assert(res != -1);
pos = 0;
}
}
private:
static std::array<std::array<char, 2>, 100> small;
static std::array<unsigned long long, 20> tens;
static constexpr size_t SIZE = 1 << 15;
int fd;
std::array<char, SIZE> line;
size_t pos = 0;
std::stringstream ss;
template <class T,
std::enable_if_t<std::is_same<char, T>::value>* = nullptr>
void write_single(const T& val) {
if (pos == SIZE) flush();
line[pos++] = val;
}
template <class T,
internal::is_signed_int_t<T>* = nullptr,
std::enable_if_t<!std::is_same<char, T>::value>* = nullptr>
void write_single(const T& val) {
using U = internal::to_unsigned_t<T>;
if (val == 0) {
write_single('0');
return;
}
if (pos > SIZE - 50) flush();
U uval = val;
if (val < 0) {
write_single('-');
uval = -uval;
}
write_unsigned(uval);
}
template <class U, internal::is_unsigned_int_t<U>* = nullptr>
void write_single(U uval) {
if (uval == 0) {
write_single('0');
return;
}
if (pos > SIZE - 50) flush();
write_unsigned(uval);
}
template <class U, internal::is_unsigned_int_t<U>* = nullptr>
static int calc_len(U x) {
int i = (bsr(x) * 3 + 3) / 10;
if (x < tens[i])
return i;
else
return i + 1;
}
template <class U,
internal::is_unsigned_int_t<U>* = nullptr,
std::enable_if_t<2 >= sizeof(U)>* = nullptr>
void write_unsigned(U uval) {
size_t len = calc_len(uval);
pos += len;
char* ptr = line.data() + pos;
while (uval >= 100) {
ptr -= 2;
memcpy(ptr, small[uval % 100].data(), 2);
uval /= 100;
}
if (uval >= 10) {
memcpy(ptr - 2, small[uval].data(), 2);
} else {
*(ptr - 1) = char('0' + uval);
}
}
template <class U,
internal::is_unsigned_int_t<U>* = nullptr,
std::enable_if_t<4 == sizeof(U)>* = nullptr>
void write_unsigned(U uval) {
std::array<char, 8> buf;
memcpy(buf.data() + 6, small[uval % 100].data(), 2);
memcpy(buf.data() + 4, small[uval / 100 % 100].data(), 2);
memcpy(buf.data() + 2, small[uval / 10000 % 100].data(), 2);
memcpy(buf.data() + 0, small[uval / 1000000 % 100].data(), 2);
if (uval >= 100000000) {
if (uval >= 1000000000) {
memcpy(line.data() + pos, small[uval / 100000000 % 100].data(),
2);
pos += 2;
} else {
line[pos] = char('0' + uval / 100000000);
pos++;
}
memcpy(line.data() + pos, buf.data(), 8);
pos += 8;
} else {
size_t len = calc_len(uval);
memcpy(line.data() + pos, buf.data() + (8 - len), len);
pos += len;
}
}
template <class U,
internal::is_unsigned_int_t<U>* = nullptr,
std::enable_if_t<8 == sizeof(U)>* = nullptr>
void write_unsigned(U uval) {
size_t len = calc_len(uval);
pos += len;
char* ptr = line.data() + pos;
while (uval >= 100) {
ptr -= 2;
memcpy(ptr, small[uval % 100].data(), 2);
uval /= 100;
}
if (uval >= 10) {
memcpy(ptr - 2, small[uval].data(), 2);
} else {
*(ptr - 1) = char('0' + uval);
}
}
template <
class U,
std::enable_if_t<internal::is_unsigned_int128<U>::value>* = nullptr>
void write_unsigned(U uval) {
static std::array<char, 50> buf;
size_t len = 0;
while (uval > 0) {
buf[len++] = char((uval % 10) + '0');
uval /= 10;
}
std::reverse(buf.begin(), buf.begin() + len);
memcpy(line.data() + pos, buf.data(), len);
pos += len;
}
void write_single(const std::string& s) {
for (char c : s) write_single(c);
}
void write_single(const char* s) {
size_t len = strlen(s);
for (size_t i = 0; i < len; i++) write_single(s[i]);
}
template <class T> void write_single(const std::vector<T>& val) {
auto n = val.size();
for (size_t i = 0; i < n; i++) {
if (i) write_single(' ');
write_single(val[i]);
}
}
};
std::array<std::array<char, 2>, 100> Printer::small = [] {
std::array<std::array<char, 2>, 100> table;
for (int i = 0; i <= 99; i++) {
table[i][1] = char('0' + (i % 10));
table[i][0] = char('0' + (i / 10 % 10));
}
return table;
}();
std::array<unsigned long long, 20> Printer::tens = [] {
std::array<unsigned long long, 20> table;
for (int i = 0; i < 20; i++) {
table[i] = 1;
for (int j = 0; j < i; j++) {
table[i] *= 10;
}
}
return table;
}();
} // namespace yosupo
#include <array>
#include <cassert>
#include <chrono>
#include <cstdint>
#include <type_traits>
namespace yosupo {
struct Xoshiro256StarStar {
public:
using result_type = uint64_t;
Xoshiro256StarStar() : Xoshiro256StarStar(0) {}
explicit Xoshiro256StarStar(uint64_t seed) {
for (int i = 0; i < 4; i++) {
uint64_t z = (seed += 0x9e3779b97f4a7c15);
z = (z ^ (z >> 30)) * 0xbf58476d1ce4e5b9;
z = (z ^ (z >> 27)) * 0x94d049bb133111eb;
s[i] = z ^ (z >> 31);
}
}
static constexpr result_type min() { return 0; }
static constexpr result_type max() { return -1; }
result_type operator()() {
const uint64_t result_starstar = rotl(s[1] * 5, 7) * 9;
const uint64_t t = s[1] << 17;
s[2] ^= s[0];
s[3] ^= s[1];
s[1] ^= s[2];
s[0] ^= s[3];
s[2] ^= t;
s[3] = rotl(s[3], 45);
return result_starstar;
}
private:
static uint64_t rotl(const uint64_t x, int k) {
return (x << k) | (x >> (64 - k));
}
std::array<uint64_t, 4> s;
};
namespace internal {
template <class G> uint64_t uniform(uint64_t upper, G& gen) {
static_assert(std::is_same<uint64_t, typename G::result_type>::value, "");
static_assert(G::min() == 0, "");
static_assert(G::max() == uint64_t(-1), "");
if (!(upper & (upper + 1))) {
return gen() & upper;
}
int log = bsr(upper);
uint64_t mask = (log == 63) ? ~0ULL : (1ULL << (log + 1)) - 1;
while (true) {
uint64_t r = gen() & mask;
if (r <= upper) return r;
}
}
} // namespace internal
Xoshiro256StarStar& global_gen() {
static Xoshiro256StarStar gen(
std::chrono::steady_clock::now().time_since_epoch().count());
return gen;
}
template <class T, class G> T uniform(T lower, T upper, G& gen) {
return T(lower + internal::uniform(uint64_t(upper) - uint64_t(lower), gen));
}
template <class T> T uniform(T lower, T upper) {
return uniform(lower, upper, global_gen());
}
template <class G> bool uniform_bool(G& gen) {
return internal::uniform(1, gen) == 1;
}
bool uniform_bool() { return uniform_bool(global_gen()); }
template <class T, class G>
std::pair<T, T> uniform_pair(T lower, T upper, G& gen) {
assert(upper - lower >= 1);
T a, b;
do {
a = uniform(lower, upper, gen);
b = uniform(lower, upper, gen);
} while (a == b);
if (a > b) std::swap(a, b);
return {a, b};
}
template <class T> std::pair<T, T> uniform_pair(T lower, T upper) {
return uniform_pair(lower, upper, global_gen());
}
} // namespace yosupo
#include <iostream>
#include <iterator>
#include <utility>
#include <vector>
#include <array>
#include <cstdint>
#include <tuple>
#include <vector>
#include <set>
#include <map>
#include <vector>
#include <algorithm>
namespace yosupo {
struct BitVec {
public:
BitVec() : BitVec(0) {}
explicit BitVec(size_t _n) : n(_n), d((n + B - 1) / B) {}
size_t size() const { return n; }
void reset() { fill(d.begin(), d.end(), 0); }
void reset(size_t i) { set(i, false); }
BitVec& set() {
for (auto& x : d) {
x = -1ULL;
}
erase_last();
return *this;
}
BitVec& set(size_t i, bool f = true) {
assert(i < n);
if (f) {
d[i / B] |= 1ULL << (i % B);
} else {
d[i / B] &= ~(1ULL << (i % B));
}
return *this;
}
bool test(size_t i) const {
assert(i < n);
return (d[i / B] >> (i % B) & 1) != 0;
}
size_t count() const {
size_t sm = 0;
for (auto x : d) sm += popcnt(x);
return sm;
}
bool any() const {
for (auto& x : d)
if (x) return true;
return false;
}
int find_first() const {
auto m = d.size();
for (size_t i = 0; i < m; i++) {
if (d[i]) return int(i * B + ::yosupo::bsf(d[i]));
}
return int(size());
}
BitVec& flip() {
op1(std::bit_not<unsigned long long>());
if (n % B) d.back() &= ~(-1ULL << (n % B));
return *this;
}
BitVec& flip(size_t i) {
return set(i, !test(i));
}
BitVec& operator~() const { return BitVec(*this).flip(); }
BitVec& operator&=(const BitVec& r) {
return op2(r, std::bit_and<unsigned long long>());
}
BitVec& operator|=(const BitVec& r) {
return op2(r, std::bit_or<unsigned long long>());
}
BitVec& operator^=(const BitVec& r) {
return op2(r, std::bit_xor<unsigned long long>());
}
BitVec& operator<<=(const size_t& s) {
auto block = s / B, rem = s % B;
if (d.size() <= block) {
reset();
return *this;
}
for (size_t i = d.size() - 1; i > block; i--) {
if (rem == 0)
d[i] = d[i - block];
else
d[i] = d[i - block] << rem | d[i - block - 1] >> (B - rem);
}
d[block] = d[0] << rem;
erase_last();
fill(d.begin(), d.begin() + block, 0ULL);
return *this;
}
BitVec& operator>>=(const size_t& s) {
auto block = s / B, rem = s % B;
if (d.size() <= block) {
reset();
return *this;
}
for (size_t i = 0; i < d.size() - block - 1; i++) {
if (rem == 0)
d[i] = d[i + block];
else
d[i] = d[i + block + 1] << (B - rem) | d[i + block] >> rem;
}
d[d.size() - block - 1] = d.back() >> rem;
fill(d.begin() + d.size() - block, d.end(), 0ULL);
return *this;
}
BitVec operator&(const BitVec& r) const { return BitVec(*this) &= r; }
BitVec operator|(const BitVec& r) const { return BitVec(*this) |= r; }
BitVec operator^(const BitVec& r) const { return BitVec(*this) ^= r; }
BitVec operator<<(const size_t& s) const { return BitVec(*this) <<= s; }
BitVec operator>>(const size_t& s) const { return BitVec(*this) >>= s; }
bool operator==(const BitVec& r) const { return d == r.d; }
bool operator!=(const BitVec& r) const { return !(d == r.d); }
void push_back(bool f) {
if (n % B == 0) d.push_back(0);
set(n, f);
n++;
}
BitVec substr(size_t st, size_t le) const {
assert(st + le <= n);
BitVec res(le);
size_t i = 0;
while (i < le) {
res.d[i / B] |= d[(st + i) / B] >> ((st + i) % B) << (i % B);
i += std::min(B - i % B, B - (st + i) % B);
}
res.erase_last();
return res;
}
bool substr_match(size_t st, const BitVec& pat) const {
size_t le = pat.size();
assert(st + le <= n);
size_t i = 0;
while (i < le) {
size_t u = std::min({le - i, B - i % B, B - (st + i) % B});
unsigned long long z = pat.d[i / B] >> (i % B) ^ d[(st + i) / B] >> ((st + i) % B);
if (z << (B - u)) return false;
i += u;
}
return true;
}
const std::vector<unsigned long long>& raw_data() const { return d; }
private:
static constexpr size_t B = 64;
size_t n;
std::vector<unsigned long long> d;
void erase_last() {
if (n % B) d.back() &= (unsigned long long)(-1) >> (B - n % B);
}
template <class OP> BitVec& op1(OP op) {
for (auto& x : d) x = op(x);
return *this;
}
template <class OP> BitVec& op2(const BitVec& r, OP op) {
assert(n == r.n);
for (size_t i = 0; i < d.size(); i++) d[i] = op(d[i], r.d[i]);
return *this;
}
};
namespace internal {
template <class H> auto update(const H& h, const BitVec& bs) {
return update(h, bs.raw_data());
}
} // namespace internal
} // namespace yosupo
namespace yosupo {
namespace internal {
constexpr int THRESHOLD_HASH = 100;
uint64_t get_seed(int i) {
static std::array<uint64_t, THRESHOLD_HASH> seed = []() {
std::array<uint64_t, THRESHOLD_HASH> _seed;
for (auto& x : _seed) {
x = yosupo::uniform(uint64_t(0), uint64_t(-1));
}
return _seed;
}();
static std::vector<uint64_t> long_seed;
if (i < THRESHOLD_HASH) return seed[i];
while (THRESHOLD_HASH + int(long_seed.size()) <= i) {
long_seed.push_back(yosupo::uniform(uint64_t(0), uint64_t(-1)));
}
return long_seed[i - THRESHOLD_HASH];
}
struct DynHasher32 {
int len = 0;
uint64_t v = get_seed(0);
DynHasher32 update32(uint32_t x) const {
return DynHasher32{len + 1, v + x * get_seed(len)};
}
DynHasher32 to_dyn() const { return *this; }
uint32_t digest() const { return uint32_t(v >> 32); }
};
template <int I = 1> struct Hasher32 {
uint64_t v = get_seed(0);
Hasher32<I + 1> update32(uint32_t x) const {
return Hasher32<I + 1>{v + x * get_seed(I)};
}
DynHasher32 to_dyn() const { return DynHasher32{I, v}; }
uint32_t digest() const { return uint32_t(v >> 32); }
};
template <class H,
class T,
is_integral_t<T>* = nullptr,
std::enable_if_t<4 >= sizeof(T)>* = nullptr>
auto update(const H& h, const T& x) {
return h.update32(uint32_t(x));
}
template <class H,
class T,
is_integral_t<T>* = nullptr,
std::enable_if_t<sizeof(T) == 8>* = nullptr>
auto update(const H& h, const T& x) {
return update(update(h, uint32_t(x)), uint32_t(uint64_t(x) >> 32));
}
template <class H,
class T,
is_integral_t<T>* = nullptr,
std::enable_if_t<sizeof(T) == 16>* = nullptr>
auto update(const H& h, const T& x) {
return update(update(h, uint64_t(x)), uint64_t((__uint128_t)(x) >> 64));
}
template <class H, class S, class T>
auto update(const H& h, const std::pair<S, T>& x) {
return update(update(h, x.first), x.second);
}
template <int I,
class H,
class T,
std::enable_if_t<(I == std::tuple_size<T>::value)>* = nullptr>
auto update(const H& h, const T&) {
return h;
}
template <int I = 0,
class H,
class T,
std::enable_if_t<(I != std::tuple_size<T>::value)>* = nullptr>
auto update(const H& h, const T& x) {
return update<I + 1>(update(h, std::get<I>(x)), x);
}
template <int I = 0,
class H,
class T,
int N>
auto update(const H& h, const std::array<T, N>& x) {
return I == N ? h : update<I + 1>(update(h, x[I]), x);
}
template <class H, class T> auto update(const H& h, const std::vector<T>& v) {
auto h2 = update(h, v.size()).to_dyn();
for (const auto& x : v) {
h2 = update(h2, x);
}
return h2;
}
template <class H, class T> auto update(const H& h, const std::set<T>& s) {
auto h2 = update(h, s.size()).to_dyn();
for (const auto& x : s) {
h2 = update(h2, x);
}
return h2;
}
template <class H, class T, class U> auto update(const H& h, const std::map<T, U>& m) {
auto h2 = update(h, m.size()).to_dyn();
for (const auto& x : m) {
h2 = update(h2, x);
}
return h2;
}
} // namespace internal
template <class T> struct UniversalHash32 {
uint32_t operator()(const T& x) {
return internal::update(internal::Hasher32<>{}, x).digest();
}
};
} // namespace yosupo
namespace yosupo {
template <class K, class D, class H = UniversalHash32<K>>
struct IncrementalHashMap {
public:
using Data = std::pair<K, D>;
private:
struct Iterator {
public:
using difference_type = int;
using value_type = Data;
using pointer = Data*;
using reference = Data&;
using iterator_category = std::forward_iterator_tag;
IncrementalHashMap& _mp;
unsigned int _pos;
Iterator(IncrementalHashMap& mp, unsigned int pos)
: _mp(mp), _pos(pos) {}
std::pair<K, D>& operator*() const { return _mp.data[_pos]; }
std::pair<K, D>* operator->() const { return &_mp.data[_pos]; }
Iterator& operator++() {
_pos = _mp.next_bucket(_pos + 1);
return *this;
}
Iterator operator++(int) {
auto result = *this;
++*this;
return result;
}
bool operator==(const Iterator& rhs) const { return _pos == rhs._pos; }
bool operator!=(const Iterator& rhs) const { return !(*this == rhs); }
};
public:
IncrementalHashMap(size_t s)
: mask((1 << s) - 1), filled(0), used(mask + 1), data(mask + 1) {}
IncrementalHashMap() : IncrementalHashMap(2) {}
Iterator begin() { return Iterator(*this, next_bucket(0)); }
Iterator end() { return Iterator(*this, mask + 1); }
using iterator = Iterator;
D& operator[](const K& k) {
unsigned int i = H()(k) & mask;
while (used[i] && data[i].first != k) {
i = (i + 1) & mask;
}
if (!used[i]) {
if (filled * 2 > mask) {
rehash();
return (*this)[k];
}
filled++;
used[i] = true;
data[i] = {k, D()};
}
return data[i].second;
}
Iterator find(const K& k) {
unsigned int i = H()(k) & mask;
while (used[i] && data[i].first != k) {
i = (i + 1) & mask;
}
if (!used[i]) return end();
return Iterator(*this, i);
}
size_t count(const K& k) {
return find(k) == end() ? 0 : 1;
}
size_t size() const { return filled; }
private:
unsigned int mask, filled; // data.size() == 1 << s
std::vector<bool> used;
std::vector<Data> data;
void rehash() {
unsigned int pmask = mask;
mask = mask * 2 + 1;
filled = 0;
auto pused = std::exchange(used, std::vector<bool>(mask + 1));
auto pdata = std::exchange(data, std::vector<Data>(mask + 1));
for (unsigned int i = 0; i <= pmask; i++) {
if (pused[i]) {
(*this)[pdata[i].first] = pdata[i].second;
}
}
}
unsigned int next_bucket(unsigned int i) const {
while (i <= mask && !used[i]) i++;
return i;
}
};
} // namespace yosupo
#include <algorithm>
#include <cassert>
#include <vector>
#ifdef _MSC_VER
#include <intrin.h>
#endif
namespace atcoder {
namespace internal {
int ceil_pow2(int n) {
int x = 0;
while ((1U << x) < (unsigned int)(n)) x++;
return x;
}
constexpr int bsf_constexpr(unsigned int n) {
int x = 0;
while (!(n & (1 << x))) x++;
return x;
}
int bsf(unsigned int n) {
#ifdef _MSC_VER
unsigned long index;
_BitScanForward(&index, n);
return index;
#else
return __builtin_ctz(n);
#endif
}
} // namespace internal
} // namespace atcoder
namespace atcoder {
template <class S, S (*op)(S, S), S (*e)()> struct segtree {
public:
segtree() : segtree(0) {}
explicit segtree(int n) : segtree(std::vector<S>(n, e())) {}
explicit segtree(const std::vector<S>& v) : _n(int(v.size())) {
log = internal::ceil_pow2(_n);
size = 1 << log;
d = std::vector<S>(2 * size, e());
for (int i = 0; i < _n; i++) d[size + i] = v[i];
for (int i = size - 1; i >= 1; i--) {
update(i);
}
}
void set(int p, S x) {
assert(0 <= p && p < _n);
p += size;
d[p] = x;
for (int i = 1; i <= log; i++) update(p >> i);
}
S get(int p) const {
assert(0 <= p && p < _n);
return d[p + size];
}
S prod(int l, int r) const {
assert(0 <= l && l <= r && r <= _n);
S sml = e(), smr = e();
l += size;
r += size;
while (l < r) {
if (l & 1) sml = op(sml, d[l++]);
if (r & 1) smr = op(d[--r], smr);
l >>= 1;
r >>= 1;
}
return op(sml, smr);
}
S all_prod() const { return d[1]; }
template <bool (*f)(S)> int max_right(int l) const {
return max_right(l, [](S x) { return f(x); });
}
template <class F> int max_right(int l, F f) const {
assert(0 <= l && l <= _n);
assert(f(e()));
if (l == _n) return _n;
l += size;
S sm = e();
do {
while (l % 2 == 0) l >>= 1;
if (!f(op(sm, d[l]))) {
while (l < size) {
l = (2 * l);
if (f(op(sm, d[l]))) {
sm = op(sm, d[l]);
l++;
}
}
return l - size;
}
sm = op(sm, d[l]);
l++;
} while ((l & -l) != l);
return _n;
}
template <bool (*f)(S)> int min_left(int r) const {
return min_left(r, [](S x) { return f(x); });
}
template <class F> int min_left(int r, F f) const {
assert(0 <= r && r <= _n);
assert(f(e()));
if (r == 0) return 0;
r += size;
S sm = e();
do {
r--;
while (r > 1 && (r % 2)) r >>= 1;
if (!f(op(d[r], sm))) {
while (r < size) {
r = (2 * r + 1);
if (f(op(d[r], sm))) {
sm = op(d[r], sm);
r--;
}
}
return r + 1 - size;
}
sm = op(d[r], sm);
} while ((r & -r) != r);
return 0;
}
private:
int _n, size, log;
std::vector<S> d;
void update(int k) { d[k] = op(d[2 * k], d[2 * k + 1]); }
};
} // namespace atcoder
using namespace yosupo;
#include <algorithm>
#include <array>
#include <bitset>
#include <cassert>
#include <complex>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
using namespace std;
using uint = unsigned int;
using ll = long long;
using ull = unsigned long long;
constexpr ll TEN(int n) { return (n == 0) ? 1 : 10 * TEN(n - 1); }
template <class T> using V = vector<T>;
template <class T> using VV = V<V<T>>;
#ifdef LOCAL
ostream& operator<<(ostream& os, __int128_t x) {
if (x < 0) {
os << "-";
x *= -1;
}
if (x == 0) {
return os << "0";
}
string s;
while (x) {
s += char(x % 10 + '0');
x /= 10;
}
reverse(s.begin(), s.end());
return os << s;
}
ostream& operator<<(ostream& os, __uint128_t x) {
if (x == 0) {
return os << "0";
}
string s;
while (x) {
s += char(x % 10 + '0');
x /= 10;
}
reverse(s.begin(), s.end());
return os << s;
}
template <class T, class U>
ostream& operator<<(ostream& os, const pair<T, U>& p);
template <class T> ostream& operator<<(ostream& os, const V<T>& v);
template <class T> ostream& operator<<(ostream& os, const deque<T>& v);
template <class T, size_t N>
ostream& operator<<(ostream& os, const array<T, N>& a);
template <class T> ostream& operator<<(ostream& os, const set<T>& s);
template <class T, class U>
ostream& operator<<(ostream& os, const map<T, U>& m);
template <class T, class U>
ostream& operator<<(ostream& os, const pair<T, U>& p) {
return os << "P(" << p.first << ", " << p.second << ")";
}
template <class T> ostream& operator<<(ostream& os, const V<T>& v) {
os << "[";
bool f = false;
for (auto d : v) {
if (f) os << ", ";
f = true;
os << d;
}
return os << "]";
}
template <class T> ostream& operator<<(ostream& os, const deque<T>& v) {
os << "[";
bool f = false;
for (auto d : v) {
if (f) os << ", ";
f = true;
os << d;
}
return os << "]";
}
template <class T, size_t N>
ostream& operator<<(ostream& os, const array<T, N>& a) {
os << "[";
bool f = false;
for (auto d : a) {
if (f) os << ", ";
f = true;
os << d;
}
return os << "]";
}
template <class T> ostream& operator<<(ostream& os, const set<T>& s) {
os << "{";
bool f = false;
for (auto d : s) {
if (f) os << ", ";
f = true;
os << d;
}
return os << "}";
}
template <class T> ostream& operator<<(ostream& os, const multiset<T>& s) {
os << "{";
bool f = false;
for (auto d : s) {
if (f) os << ", ";
f = true;
os << d;
}
return os << "}";
}
template <class T, class U>
ostream& operator<<(ostream& os, const map<T, U>& s) {
os << "{";
bool f = false;
for (auto p : s) {
if (f) os << ", ";
f = true;
os << p.first << ": " << p.second;
}
return os << "}";
}
struct PrettyOS {
ostream& os;
bool first;
template <class T> auto operator<<(T&& x) {
if (!first) os << ", ";
first = false;
os << x;
return *this;
}
};
template <class... T> void dbg0(T&&... t) {
(PrettyOS{cerr, true} << ... << t);
}
#define dbg(...) \
do { \
cerr << __LINE__ << " : " << #__VA_ARGS__ << " = "; \
dbg0(__VA_ARGS__); \
cerr << endl; \
} while (false);
#else
#define dbg(...)
#endif
Scanner sc = Scanner(stdin);
Printer pr = Printer(stdout);
ll op_min(ll a, ll b) { return min(a, b); }
ll e_min() { return TEN(18); }
using P = pair<int, int>;
using Q = pair<int, int>;
ll dist2(const P& x, const P& y) {
return 1LL * (x.first - y.first) * (x.first - y.first) + 1LL * (x.second - y.second) * (x.second - y.second);
}
V<ll> naive(V<P> ps, V<Q> ques) {
V<ll> ans;
for (auto que: ques) {
ll buf = TEN(18);
int l = que.first, r = que.second;
for (int i = l; i < r; i++) {
for (int j = i + 1; j < r; j++) {
buf = min(buf, dist2(ps[i], ps[j]));
}
}
ans.push_back(buf);
}
return ans;
}
const bool test_mode = false;
struct RMQ {
const int B = 200;
V<ll> d, bd;
RMQ(int n) {
d = V<ll>(n, TEN(18));
bd = V<ll>((n + B - 1) / B, TEN(18));
}
void dec(int p, ll x) {
d[p] = min(d[p], x);
bd[p / B] = min(bd[p / B], x);
}
ll que(int l, int r) {
int lb = l / B, rb = r / B;
ll ans = TEN(18);
if (lb == rb) {
for (int i = l; i < r; i++) {
ans = min(ans, d[i]);
}
return ans;
}
while (l % B) {
ans = min(ans, d[l]);
l++;
}
while (r % B) {
r--;
ans = min(ans, d[r]);
}
for (int i = l / B; i < r / B; i++) {
ans = min(ans, bd[i]);
}
return ans;
}
};
V<ll> solve(V<P> ps, V<Q> ques) {
int n = int(ps.size());
int q = int(ques.size());
const int L = 28;
V<IncrementalHashMap<P, V<int>>> buckets(L);
V<ll> ans(q, -1);
VV<Q> ques2(n + 1);
for (int i = 0; i < q; i++) {
auto que = ques[i];
ques2[que.second - 1].push_back({que.first, i});
}
//atcoder::segtree<ll, op_min, e_min> seg(n);
RMQ seg(n);
for (int r = 0; r < n; r++) {
for (int layer = L - 1; layer >= 0; layer--) {
ll min_dist2 = (layer == 0) ? 0 : (1LL << ((layer - 1) * 2));
P p = P(ps[r].first >> layer, ps[r].second >> layer);
for (int x = p.first - 1; x <= p.first + 1; x++) {
for (int y = p.second - 1; y <= p.second + 1; y++) {
auto it = buckets[layer].find(P{x, y});
if (it == buckets[layer].end()) continue;
int len = int(it->second.size());
for (int i = 0; i < len; i++) {
int l = it->second[i];
ll di = dist2(ps[l], ps[r]);
seg.dec(l, di);
if (di <= min_dist2) {
it->second.erase(it->second.begin() + i, it->second.end());
break;
}
}
}
}
auto& v = buckets[layer][p];
v.insert(v.begin(), r);
int len = int(v.size());
for (int i = 1; i < len; i++) {
int l = v[i];
ll di = dist2(ps[l], ps[r]);
if (di <= min_dist2) {
v.erase(v.begin() + i, v.end());
break;
}
}
}
for (auto que : ques2[r]) {
//ans[que.second] = seg.prod(que.first, r + 1);
ans[que.second] = seg.que(que.first, r + 1);
}
}
return ans;
}
void test() {
dbg("TEST START");
int tm = 0;
while (true) {
if (tm % 100 == 0) dbg(tm);
tm++;
V<P> ps;
int n = 50;
for (int i = 0; i < n; i++) {
//const ll Dlim = 10;
const ll Dlim = TEN(2);
ll x = uniform(1LL, Dlim);
ll y = uniform(1LL, Dlim);
ps.push_back({x, y});
}
V<Q> ques;
for (int l = 0; l < n; l++) {
for (int r = l + 1; r <= n; r++) {
ques.push_back({l, r});
}
}
auto expect = naive(ps, ques);
auto actual = solve(ps, ques);
assert(expect == actual);
}
}
void test_big() {
V<P> ps;
int n = 250000;
for (int i = 0; i < n; i++) {
const ll Dlim = TEN(8);
ll x = uniform(1LL, Dlim);
ll y = uniform(1LL, Dlim);
ps.push_back({x, y});
}
int q = 250000;
V<Q> ques;
for (int i = 0; i < q; i++) {
int l = uniform(0, n - 1);
int r = uniform(0, n - 1);
if (l > r) swap(l, r);
ques.push_back({l, r});
}
solve(ps, ques);
}
void solve() {
int n, q;
sc.read(n, q);
V<P> ps;
for (int i = 0; i < n; i++) {
ll x, y;
sc.read(x, y);
ps.push_back({x, y});
}
V<Q> ques;
for (int i = 0; i < q; i++) {
int l, r;
sc.read(l, r);
l--;
ques.push_back({l, r});
}
auto ans = solve(ps, ques);
for (auto x : ans) {
pr.writeln(x);
}
}
int main() {
if (test_mode) {
// test_big();
test();
} else {
solve();
}
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3504kb
input:
5 5 2 4 1 1 3 3 5 1 4 2 1 5 2 3 2 4 3 5 1 3
output:
2 8 8 2 2
result:
ok 5 number(s): "2 8 8 2 2"
Test #2:
score: 0
Accepted
time: 1ms
memory: 3464kb
input:
2 1 1 1 1 1 1 2
output:
0
result:
ok 1 number(s): "0"
Test #3:
score: 0
Accepted
time: 1ms
memory: 3520kb
input:
2 1 1 100000000 100000000 1 1 2
output:
19999999600000002
result:
ok 1 number(s): "19999999600000002"
Test #4:
score: 0
Accepted
time: 190ms
memory: 13596kb
input:
20000 250000 3 10 5 4 4 7 1 5 2 1 10 6 2 3 8 4 2 1 8 5 9 8 7 7 4 5 2 7 9 4 9 10 3 2 9 5 10 2 9 2 3 1 9 9 6 5 9 5 9 10 9 1 1 2 8 8 3 4 7 6 6 2 6 8 6 6 8 4 10 2 1 1 10 2 8 3 4 4 5 5 5 1 4 9 7 6 6 8 6 4 1 6 10 3 3 2 4 10 6 8 9 7 2 10 7 8 10 7 3 2 5 1 6 4 7 9 1 3 4 9 4 8 9 4 5 2 2 2 9 2 9 2 9 6 6 9 8 7 ...
output:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
result:
ok 250000 numbers
Test #5:
score: 0
Accepted
time: 205ms
memory: 15940kb
input:
20000 250000 72 45 72 34 34 10 20 96 79 39 43 5 72 49 56 85 1 72 44 70 73 89 69 76 49 89 57 38 39 9 33 47 22 3 96 41 90 82 25 6 72 92 73 38 53 21 16 88 59 9 54 2 14 6 7 94 99 68 27 82 70 50 81 81 60 81 2 98 33 19 98 9 35 36 49 66 86 7 3 95 32 89 62 42 68 88 65 16 94 6 85 10 51 69 90 36 70 87 13 79 4...
output:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...
result:
ok 250000 numbers
Test #6:
score: 0
Accepted
time: 247ms
memory: 24468kb
input:
20000 250000 116 165 150 677 951 676 552 324 267 222 739 755 705 663 235 142 152 714 735 641 414 201 313 663 683 300 403 739 37 521 42 833 553 733 886 449 86 913 55 637 731 932 143 161 500 891 719 79 916 237 431 992 804 210 643 332 165 362 178 332 821 510 762 34 188 83 283 357 743 407 750 487 19 658...
output:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 1 0 1 0 0 0 2 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 5 0 0 0 0 0 1 0 0 0 1 1 0 0 0 2 0 0 0 0 0 0 ...
result:
ok 250000 numbers
Test #7:
score: 0
Accepted
time: 380ms
memory: 51924kb
input:
20000 250000 193144 901630 894860 3728 802840 155641 625273 792794 433205 942335 223506 874548 425235 550629 341169 950916 49296 305542 709463 512381 9742 994078 106664 845553 38691 373010 184728 331946 344567 438182 854583 291040 94405 555036 56330 494420 928479 123077 796593 798314 300374 490072 2...
output:
3576676 1219565 93925 2336788 8872 68 137 842657 137 8560936 13914025 28521 88362 8872 8872 52996 12869 86297 68 8137625 93925 12869 86297 8872 8872 8872 47888 8872 12869 107860 12869 59536 59536 425540 12869 59536 8872 93925 117225 137 137 52996 68 52996 137 8872 68 12869 137 68 86297 1514 159700 6...
result:
ok 250000 numbers
Test #8:
score: 0
Accepted
time: 485ms
memory: 74016kb
input:
20000 250000 65468917 46637638 46041830 58072288 95596278 49154795 57837493 40861050 21328886 69542502 7729300 7126264 2317013 48080367 75669670 20165373 93996778 88884044 8523082 62327896 123901 11925128 71901024 73104267 94991893 98591670 53591520 11543761 76785613 86286274 64694742 89591932 75687...
output:
185588005 3282196826 141969393 25769005 141969393 185588005 576346153849 141969393 141969393 185588005 141969393 141969393 141969393 141969393 135584833 141969393 141969393 485404589 1182793 1182793 35224007589 135584833 185588005 931246420 185588005 25769005 375240717 141969393 2245310308 239709665...
result:
ok 250000 numbers
Test #9:
score: 0
Accepted
time: 1109ms
memory: 25812kb
input:
250000 250000 1 2 1 1 3 2 3 3 1 2 3 2 1 2 1 3 3 1 2 1 1 3 2 3 3 3 1 3 3 1 3 1 1 3 2 1 1 2 1 1 1 2 2 2 1 2 1 2 1 3 3 3 1 1 3 2 1 2 2 2 1 1 2 3 3 2 2 1 3 3 2 1 2 3 3 1 2 3 3 2 2 1 1 1 3 2 1 2 1 3 3 1 2 3 2 1 1 2 1 1 1 2 3 3 1 2 2 2 3 1 3 1 3 1 1 2 2 2 1 1 3 3 1 3 1 3 1 2 1 2 3 1 3 2 1 2 2 2 1 2 1 1 2 ...
output:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
result:
ok 250000 numbers
Test #10:
score: 0
Accepted
time: 2202ms
memory: 66648kb
input:
250000 250000 65 333 64 141 52 164 104 499 329 292 187 279 178 394 92 488 223 487 457 262 355 475 466 223 450 293 397 22 390 379 257 389 339 162 228 267 446 78 116 3 28 400 63 319 255 491 459 301 340 321 183 340 469 6 288 268 383 446 456 13 478 383 109 79 142 317 132 219 168 347 30 398 59 453 192 33...
output:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
result:
ok 250000 numbers
Test #11:
score: 0
Accepted
time: 3746ms
memory: 158652kb
input:
250000 250000 5939 214 4869 2285 3576 8124 1179 6365 863 9874 6034 7110 9688 5453 1631 1975 7330 8868 1035 8771 9222 9417 7858 1642 3145 4403 8553 6105 8162 2232 2192 4946 5925 8017 1235 5374 6897 5409 8507 8625 7239 4621 5581 4870 4979 1749 35 1282 9138 5489 1030 8851 4444 905 5808 4770 348 7535 16...
output:
1 4 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 25 1 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 4 0 0 0 1 21925 0 0 0 0 0 0 0 0 0 0 0 0...
result:
ok 250000 numbers
Test #12:
score: 0
Accepted
time: 8338ms
memory: 479188kb
input:
250000 250000 7455187 75182576 14834779 53171998 80916167 45846874 44479602 88587946 22419247 21232863 45054521 14420458 26938419 38366452 40688894 64933635 58825078 27729802 43992064 49857990 80761962 17266078 67198634 69525730 78961694 90909521 86333066 79243240 75184949 63327693 20070526 51545836...
output:
345163988 17297 17297 17297 3342826 2692082 9929385 17297 17297 8796836 17297 1024786 17297 17297 11911909 17297 17297 1518912 39645 3342826 623969 17297 17297 9929385 17297 17297 1931549 346277845 17297 17297 11911909 117753730 17297 5756500 623969 1024786 17297 17297 4290746 17297 17297 623969 172...
result:
ok 250000 numbers
Test #13:
score: 0
Accepted
time: 8361ms
memory: 479272kb
input:
250000 250000 46988183 58848304 68248752 17909655 83617101 6540168 35239739 61188742 53626925 43849602 93050637 37107186 81895363 18264817 49186829 46896179 432608 14970834 27450067 64324424 95545626 36896275 99221358 60404199 53496911 74842046 75080552 5484539 24301428 65640142 96567779 65503273 98...
output:
364165 364165 364165 364165 1118420 364165 2875970 364165 364165 18782189 364165 2443444 2443444 364165 364165 2443444 477485 4069129 4832930 6161897 26896946 364165 26896946 2875970 1028485 16319272 1028485 364165 10848521 364165 893349 8344033 1861925 893349 16319272 2875970 2443444 364165 1028485...
result:
ok 250000 numbers
Test #14:
score: 0
Accepted
time: 8514ms
memory: 479216kb
input:
250000 250000 91248546 19112361 80003885 9173894 78946509 40597624 69292429 19443411 62836211 54539297 21113442 50348948 79804335 68234343 72628821 86879420 57634006 80551531 56031660 58204680 64883168 19157561 57708639 65267544 16502324 51487377 52951273 64713455 36315517 95949044 53263309 72456798...
output:
173585 1749061 17137028 173585 173585 173585 173585 173585 829306 245785 173585 3192869 173585 1100852 39267488 173585 173585 245785 14222466 245785 173585 173585 173585 173585 2558933 173585 173585 27213905 829306 353040509 1100852 173585 173585 20949364 1100852 173585 173585 173585 11259905 919450...
result:
ok 250000 numbers
Test #15:
score: 0
Accepted
time: 3430ms
memory: 48408kb
input:
240032 250000 50000000 50000000 50002262 76010790 50001271 86525300 98641920 50000129 50002536 73103650 33803461 50003187 50001627 17251861 84626110 50001450 14694851 50001386 50002865 30387041 50002785 29538241 3543741 50000335 50002609 72329120 10652441 50001005 69740280 50002853 50000834 8838131 ...
output:
112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 ...
result:
ok 250000 numbers
Test #16:
score: 0
Accepted
time: 2943ms
memory: 48468kb
input:
240032 250000 50000000 50000000 35893631 50003384 39734451 50003746 87851550 50001146 22238561 50002097 22864551 50002156 50000020 201591 24784961 50002337 50001288 13655071 50003130 66801310 33485161 50003157 4360711 50000412 16731971 50001578 11214771 50001058 50002790 70408710 50002188 23204071 5...
output:
112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 112470002 ...
result:
ok 250000 numbers
Test #17:
score: 0
Accepted
time: 1269ms
memory: 26048kb
input:
250000 250000 50000000 50000000 50000001 49999999 50000002 49999998 50000003 49999997 50000004 49999996 50000005 49999995 50000006 49999994 50000007 49999993 50000008 49999992 50000009 49999991 50000010 49999990 50000011 49999989 50000012 49999988 50000013 49999987 50000014 49999986 50000015 4999998...
output:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
result:
ok 250000 numbers
Test #18:
score: 0
Accepted
time: 1466ms
memory: 66696kb
input:
250000 250000 50000000 50000000 50000001 49999999 50000002 49999998 50000003 49999997 50000004 49999996 50000005 49999995 50000006 49999994 50000007 49999993 50000008 49999992 50000009 49999991 50000010 49999990 50000011 49999989 50000012 49999988 50000013 49999987 50000014 49999986 50000015 4999998...
output:
1 2 2 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 2 2 1 2 1 2 2 2 2 2 2 2 2 1 2 2 1 2 1 1 2 2 1 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 1 2 2 1 1 2 2 2 1 2 2 2 2 2 2 1 2 2 2 2 2 1 2 2 2 1 1 2 2 2 2 2 2 2 1 2 1 1 2 1 2 2 2 1 2 2 2 2 2 1 2 1 1 2 1 2 2 2 2 1 1 1 2 2 1 2 2 2 1 2 1 1 ...
result:
ok 250000 numbers