QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#92475 | #21648. Runs | zghtyarecrenj# | Compile Error | / | / | C++14 | 12.1kb | 2023-03-30 17:06:48 | 2023-03-30 17:07:18 |
Judging History
你现在查看的是最新测评结果
- [2023-08-10 23:21:45]
- System Update: QOJ starts to keep a history of the judgings of all the submissions.
- [2023-03-30 17:07:18]
- 评测
- 测评结果:Compile Error
- 用时:0ms
- 内存:0kb
- [2023-03-30 17:06:48]
- 提交
answer
#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
#include <bits/stdc++.h>
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
namespace standard_utilities {
template <typename Ty>
inline Ty max(const Ty &a, const Ty &b) {
return a > b ? a : b;
}
template <typename Ty>
inline Ty min(const Ty &a, const Ty &b) {
return a < b ? a : b;
}
template <typename Ty>
inline void check_max(Ty &a, const Ty &b) {
if (b > a)
a = b;
}
template <typename Ty>
inline void check_min(Ty &a, const Ty &b) {
if (b < a)
a = b;
}
template <typename Ty>
inline void swap(Ty &a, Ty &b) {
Ty c = a;
a = b, b = c;
}
} // namespace standard_utilities
using namespace standard_utilities;
namespace Fast_IO {
const int MaxBuff = 1 << 15;
const int MaxOut = 1 << 24;
char b[MaxBuff], *S = b, *T = b;
char buff[MaxOut], *iter = buff;
inline void flush() {
fwrite(buff, 1, iter - buff, stdout), iter = buff;
}
inline char get_char() {
return (S == T && (T = (S = b) + fread(b, 1, MaxBuff, stdin), S == T) ? 0 : *S++);
}
inline void put_char(char c) {
if (iter - buff >= 1 << 24 - 1)
flush();
*iter++ = c;
}
struct Fast_IO_template {
~Fast_IO_template() {
flush();
}
inline Fast_IO_template &operator>>(char &c) {
c = get_char();
return *this;
}
inline Fast_IO_template &operator<<(char c) {
put_char(c);
return *this;
}
inline Fast_IO_template &operator>>(char *s) {
char *iter = s;
while (*iter = get_char(), *iter == ' ' || *iter == '\n' || *iter == '\r');
while (*++iter = get_char(), *iter && *iter != ' ' && *iter != '\n' && *iter != '\r');
*iter = 0;
return *this;
}
inline Fast_IO_template &operator<<(int x) {
static int stack[110];
int O = 0;
if (!x)
put_char('0');
else {
if (x < 0)
x = -x, put_char('-');
for (; x; x /= 10)
stack[++O] = x % 10;
for (; O; put_char('0' + stack[O--]));
}
return *this;
}
};
} // namespace Fast_IO
Fast_IO::Fast_IO_template io;
const int N = 1e6 + 10;
struct my_tuple {
int x, y, z;
inline bool operator < (const my_tuple &b) const {
if (x != b.x)
return x < b.x;
if (y != b.y)
return y < b.y;
return z < b.z;
}
inline int operator[](const int b) {
if (b == 0)
return x;
if (b == 1)
return y;
if (b == 2)
return z;
}
inline bool operator == (const my_tuple &b) {
return x == b.x && y == b.y && z == b.z;
}
inline bool operator != (const my_tuple &b) {
return x != b.x || y != b.y || z != b.z;
}
};
struct my_pair {
int x, y;
inline int &operator[](const int b) {
return b == 0 ? x : y;
}
};
namespace SAIS {
#define alloc(x, type, len) type *x = new type[len];
void induced_sort(int n, int m, int *s, bool *T, int *sa, int *cnt) {
static int lptr[N], rptr[N];
int tmp;
lptr[0] = rptr[0] = 0;
for (int i = 1; i <= m; ++i)
lptr[i] = cnt[i - 1], rptr[i] = cnt[i] - 1;
for (int i = 0; i <= n; ++i)
sa[i] > 0 && !T[tmp = sa[i] - 1] ? sa[lptr[s[tmp]]++] = tmp : 0;
for (int i = n; i >= 0; --i)
sa[i] > 0 && T[tmp = sa[i] - 1] ? sa[rptr[s[tmp]]--] = tmp : 0;
}
bool compare(int *x, int *y, int n) {
while (n--)
if (*x++ != *y++)
return 1;
return 0;
}
void sais(int n, int m, int *s, int *sa) {
--n;
alloc(T, bool, n + 10);
alloc(cnt, int, m + 10);
alloc(lms, int, n + 10);
alloc(tmp, int, n + 10);
for (int i = n; i >= 0; --i) {
T[i] = (i == n || s[i] < s[i + 1] || s[i] == s[i + 1] && T[i + 1]);
++cnt[s[i]];
}
tmp[0] = 0;
for (int i = 1; i <= m; ++i)
cnt[i] += cnt[i - 1], tmp[i] = cnt[i] - 1;
int LMS = 0;
for (int i = 1; i <= n; ++i)
T[i] && !T[i - 1] ? lms[LMS++] = i : 0;
memset(sa, -1, (n + 1) << 2);
for (int i = 0; i < LMS; ++i)
sa[tmp[s[lms[i]]]--] = lms[i];
induced_sort(n, m, s, T, sa, cnt);
alloc(len, int, n + 10);
lms[LMS] = n + 1;
for (int i = 0; i < LMS; ++i)
len[lms[i]] = lms[i + 1] - lms[i] + 1;
alloc(lab, int, n + 10);
int m0 = 0;
memset(lab, -1, (n + 1) << 2);
for (int i = 1, p = -1, q = -1; i <= n; ++i)
if ((q = sa[i]) > 0 && T[q] && !T[q - 1]) {
if (p == -1 || len[p] != len[q] || compare(s + p, s + q, len[p]))
++m0;
lab[q] = m0;
p = q;
}
lab[n] = 0;
alloc(s0, int, LMS + 10);
alloc(sa0, int, LMS + 10);
for (int i = 0, p = 0; i <= n; ++i)
lab[i] >= 0 ? s0[p++] = lab[i] : 0;
if (m0 + 1 == LMS)
for (int i = 0; i < LMS; ++i)
sa0[s0[i]] = i;
else
sais(LMS, m0, s0, sa0);
tmp[0] = 0;
for (int i = 1; i <= m; ++i)
tmp[i] = cnt[i] - 1;
memset(sa, -1, (n + 1) << 2);
for (int i = LMS - 1; i >= 0; --i)
sa[tmp[s[lms[sa0[i]]]]--] = lms[sa0[i]];
induced_sort(n, m, s, T, sa, cnt);
}
} // namespace SAIS
inline int log2n(int n) {
return 32 - __builtin_clz(n - 1);
}
namespace RMQ_table {
const int N = 2e6 + 20;
const int D_max = 21;
const int L = 20;
const int inf = 1 << 30;
int stack[L + 1];
template <typename T, int MAXN>
class ST {
private:
int f[N / L][D_max], M[N / L], a[N + L], n, q, D;
struct node {
int state[L + 1], *a;
int Qmin(int x, int y) {
return a[x + __builtin_ctz(state[y] >> x)];
}
void init(int *_a) {
int top = 0;
a = _a;
for (int i = 1; i <= L; ++i) {
state[i] = state[i - 1];
while (top && a[i] <= a[stack[top]])
state[i] -= 1 << stack[top], --top;
stack[++top] = i;
state[i] += 1 << i;
}
}
} c[N / L];
public:
void build(int _n, int *_a) {
n = _n;
for (int i = 1; i <= _n; ++i)
a[i] = _a[i];
D = int(log2(n)) + 1;
int nn = n / L;
M[0] = -1;
for (int i = 1; i <= nn; ++i) {
f[i][0] = inf;
for (int j = 1; j <= L; ++j)
f[i][0] = min(f[i][0], a[(i - 1) * L + j]);
}
for (int i = 1; i <= nn; ++i)
M[i] = !(i & (i - 1)) ? M[i - 1] + 1 : M[i - 1];
for (int j = 1; j <= D; ++j)
for (int i = 1; i <= nn - (1 << j) + 1; ++i)
f[i][j] = min(f[i][j - 1], f[i + (1 << (j - 1))][j - 1]);
for (int i = 1; i <= nn + 1; ++i)
c[i].init(a + (i - 1) * L);
}
inline int Qmin_ST(int x, int y) {
int z = M[y - x + 1];
return min(f[x][z], f[y - (1 << z) + 1][z]);
}
inline int rmq(int x, int y) {
++x, ++y;
int xx = (x - 1) / L + 1, yy = (y - 1) / L + 1, res;
if (xx + 1 <= yy - 1)
res = Qmin_ST(xx + 1, yy - 1);
else
res = inf;
if (xx == yy)
res = min(res, c[xx].Qmin(x - (xx - 1) * L, y - (yy - 1) * L));
else
res = min(res, c[xx].Qmin(x - (xx - 1) * L, L)), res = min(res, c[yy].Qmin(1, y - (yy - 1) * L));
return res;
}
};
} // namespace RMQ_table
using RMQ_table::ST;
template <int N, template <typename, int> class RMQ_T>
class SA {
public:
RMQ_T < int, N - 1 > rmq;
int n, sa[N], rk[N], height[N];
void build(int _n, char *str) {
n = _n;
alloc(s, int, n + 10);
for (int i = 0; i < n; ++i)
s[i] = str[i];
SAIS::sais(n + 1, 26, s, sa);
for (int i = 1; i <= n; ++i)
rk[sa[i]] = i;
for (int k = 0, i = 0, j; i < n; height[rk[i++]] = k)
for (k ? k-- : 0, j = sa[rk[i] - 1]; s[i + k] == s[j + k]; ++k);
rmq.build(n, height);
}
int lcp(int i, int j) {
//printf("lcp(%d,%d)\n", i, j);
if (i == j)
return n - i;
if (j == n)
return 0;
i = rk[i], j = rk[j];
if (i > j)
std::swap(i, j);
return rmq.rmq(i, j - 1);
}
};
template <int N, template <typename, int> class RMQ_T>
class ISA {
public:
RMQ_T < int, N - 1 > rmq;
int n, sa[N], rk[N], height[N];
void build(int _n, char *str) {
n = _n;
alloc(s, int, n + 10);
for (int i = 0; i < n; ++i)
s[i] = str[n - i - 1];
SAIS::sais(n + 1, 26, s, sa);
for (int i = 1; i <= n; ++i)
rk[sa[i]] = i;
for (int k = 0, i = 0, j; i < n; height[rk[i++]] = k)
for (k ? k-- : 0, j = sa[rk[i] - 1]; s[i + k] == s[j + k]; ++k);
rmq.build(n, height);
//for (int i = 2; i <= n + 1; ++i) printf("%d ", height[i]); printf("\n");
//for (int i = 0; i < n; ++i) printf("%d ", rk[i]); printf("\n");
}
int lcs(int i, int j) {
//++i, ++j;
if (i <= 0 || j <= 0)
return 0;
if (i == j)
return i;
i = rk[n - i], j = rk[n - j];
if (i > j)
std::swap(i, j);
//printf("rmq(%d,%d)", i, j);
return rmq.rmq(i, j - 1);
}
};
int n, nsv[N], nbv[N];
char s[N];
SA<N, ST> sa;
ISA<N, ST> isa;
std::vector<my_tuple> runs;
int get_lcs(int i, int j) {
int low = 0, high = min(i, j);
while (low < high) {
int middle = low + high + 1 >> 1;
if (sa.lcp(i - middle, j - middle) >= middle)
low = middle;
else
high = middle - 1;
}
//printf("lcs(%d,%d) : %d %d\n", i, j, isa.lcs(i, j), low);
return low;
}
void add_run(int i, int j) {
int length = j - i;
int lcs = isa.lcs(i, j);
if (lcs < length) {
int lcp = sa.lcp(i, j);
if (lcs + lcp >= length)
runs.push_back((my_tuple) {
i - lcs + 1, j + lcp, length
});
}
}
std::vector<int> a[N], a2[N], a3[N];
int b[N], c[N];
void my_sort_and_unique() {
int m = runs.size();
for (int i = 0; i < m; ++i)
a[runs[i].z].push_back(i);
for (int i = 1, tmp = 0; i <= n; ++i)
for (int j = 0; j < a[i].size(); ++j)
b[tmp++] = a[i][j];
for (int i = 0; i < m; ++i)
a2[runs[b[i]].y].push_back(b[i]);
for (int i = 1, tmp = 0; i <= n; ++i)
for (int j = 0; j < a2[i].size(); ++j)
b[tmp++] = a2[i][j];
for (int i = 0; i < m; ++i)
a3[runs[b[i]].x].push_back(b[i]);
for (int i = 1, tmp = 0; i <= n; ++i)
for (int j = 0; j < a3[i].size(); ++j)
b[tmp++] = a3[i][j];
int tmp = 0;
c[0] = b[0];
for (int i = 1; i < m; ++i)
if (runs[b[i - 1]] != runs[b[i]])
c[++tmp] = b[i];
io << tmp + 1 << '\n';
for (int i = 0; i <= tmp; ++i)
io << runs[c[i]].x << ' ' << runs[c[i]].y << ' ' << runs[c[i]].z << '\n';
}
int main() {
io >> s;
n = strlen(s);
for (int i = 0; i < n; ++i)
s[i] = s[i] - 'a' + 1;
sa.build(n, s);
isa.build(n, s);
for (int i = n; i--;) {
for (int &j = nsv[i] = i + 1; j < n && sa.rk[i] < sa.rk[j];)
j = nsv[j];
for (int &j = nbv[i] = i + 1; j < n && sa.rk[i] > sa.rk[j];)
j = nbv[j];
add_run(i, nsv[i]);
if (nsv[i] != nbv[i])
add_run(i, nbv[i]);
}
std::sort(runs.begin(), runs.end());
runs.erase(std::unique(runs.begin(), runs.end()), runs.end());
io << (int)runs.size() << '\n';
for (auto a : runs)
io << a.x << ' ' << a.y << ' ' << a.z << '\n';
return 0;
}
Details
In file included from /usr/include/x86_64-linux-gnu/c++/11/bits/gthr.h:148, from /usr/include/c++/11/ext/atomicity.h:35, from /usr/include/c++/11/bits/ios_base.h:39, from /usr/include/c++/11/ios:42, from /usr/include/c++/11/istream:38, from /usr/include/c++/11/sstream:38, from /usr/include/c++/11/complex:45, from /usr/include/c++/11/ccomplex:39, from /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h:54, from answer.code:3: /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:102:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute 102 | __gthrw(pthread_once) | ^~~~~~~ /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:102:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:103:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute 103 | __gthrw(pthread_getspecific) | ^~~~~~~ /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:103:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:104:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute 104 | __gthrw(pthread_setspecific) | ^~~~~~~ /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:104:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:106:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute 106 | __gthrw(pthread_create) | ^~~~~~~ /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:106:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:107:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute 107 | __gthrw(pthread_join) | ^~~~~~~ /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:107:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:108:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute 108 | __gthrw(pthread_equal) | ^~~~~~~ /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:108:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:109:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute 109 | __gthrw(pthread_self) | ^~~~~~~ /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:109:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:110:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute 110 | __gthrw(pthread_detach) | ^~~~~~~ /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:110:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:112:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute 112 | __gthrw(pthread_cancel) | ^~~~~~~ /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:112:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:114:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute 114 | __gthrw(sched_yield) | ^~~~~~~ /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:114:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:116:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute 116 | __gthrw(pthread_mutex_lock) | ^~~~~~~ /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:116:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:117:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute 117 | __gthrw(pthread_mutex_trylock) | ^~~~~~~ /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:117:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:119:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute 119 | __gthrw(pthread_mutex_timedlock) | ^~~~~~~ /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:119:1: error: attribute value ‘tune=native’ was already specified in ‘target’ attribute /usr/...