QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#500922 | #3856. Repetitions | PetroTarnavskyi | RE | 1ms | 4060kb | C++23 | 4.3kb | 2024-08-02 02:58:14 | 2024-08-02 02:58:14 |
Judging History
answer
#pragma GCC optimize ("O3")
//#pragma GCC target ("avx2")
#include <bits/stdc++.h>
using namespace std;
#define FOR(i, a, b) for(int i = (a); i < (b); i++)
#define RFOR(i, a, b) for(int i = (a) - 1; i >= (b); i--)
#define SZ(a) int(a.size())
#define ALL(a) a.begin(), a.end()
#define PB push_back
#define MP make_pair
#define F first
#define S second
typedef long long LL;
typedef vector<int> VI;
typedef pair<int, int> PII;
typedef double db;
const int LOG = 20;
struct SparseTable
{
VI t[LOG];
void push_back(int v)
{
int i = SZ(t[0]);
t[0].PB(v);
FOR (j, 0, LOG - 1)
t[j + 1].PB(min(t[j][i], t[j][max(0, i - (1 << j))]));
}
// [l, r)
int query(int l, int r)
{
assert(l < r && r <= SZ(t[0]));
int i = 31 - __builtin_clz(r - l);
return min(t[i][r - 1], t[i][l + (1 << i) - 1]);
}
};
void countSort(VI& p, const VI& c)
{
int n = SZ(p);
VI cnt(n);
FOR (i, 0, n)
cnt[c[i]]++;
VI pos(n);
FOR (i, 1, n)
pos[i] = pos[i - 1] + cnt[i - 1];
VI p2(n);
for (auto x : p)
{
int i = c[x];
p2[pos[i]++] = x;
}
p = p2;
}
VI suffixArray(VI s)
{
// strictly smaller than any other element
s.PB(-1);
int n = SZ(s);
VI p(n), c(n);
iota(ALL(p), 0);
sort(ALL(p), [&](int i, int j)
{
return s[i] < s[j];
});
int x = 0;
c[p[0]] = 0;
FOR (i, 1, n)
{
if (s[p[i]] != s[p[i - 1]])
x++;
c[p[i]] = x;
}
int k = 0;
while ((1 << k) < n)
{
FOR (i, 0, n)
p[i] = (p[i] - (1 << k) + n) % n;
countSort(p, c);
VI c2(n);
PII pr = {c[p[0]], c[(p[0] + (1 << k)) % n]};
FOR (i, 1, n)
{
PII nx = {c[p[i]], c[(p[i] + (1 << k)) % n]};
c2[p[i]] = c2[p[i - 1]];
if (pr != nx)
c2[p[i]]++;
pr = nx;
}
c = c2;
k++;
}
p.erase(p.begin());
s.pop_back();
return p;
}
struct LCP
{
int n;
VI s, sa, rnk, lcp;
SparseTable st;
LCP(VI _s): n(SZ(_s)), s(_s)
{
sa = suffixArray(s);
rnk.resize(n);
FOR (i, 0, n)
rnk[sa[i]] = i;
lcpArray();
FOR (i, 0, n - 1)
st.PB(lcp[i]);
}
void lcpArray()
{
lcp.resize(n - 1);
int h = 0;
FOR (i, 0, n)
{
if (h > 0)
h--;
if (rnk[i] == 0)
continue;
int j = sa[rnk[i] - 1];
for (; j + h < n && i + h < n; h++)
{
if (s[j + h] != s[i + h])
break;
}
lcp[rnk[i] - 1] = h;
}
}
int queryLcp(int i, int j)
{
if (i == n || j == n)
return 0;
assert(i != j); // return n - i ????
i = rnk[i];
j = rnk[j];
if (i > j)
swap(i, j);
// query [i, j)
return st.query(i, j);
}
};
vector<tuple<int, int, int>> solve(VI s)
{
int n = SZ(s);
LCP lcp(s); reverse(ALL(s));
LCP rev(s); reverse(ALL(s));
vector<tuple<int, int, int>> runs;
FOR(inv, 0, 2)
{
VI st = {n};
auto pop = [&](int i)
{
int j = st.back();
int dist = j - i;
int distPrev = st[SZ(st) - 2] - j;
int distMn = min(dist, distPrev);
int len = lcp.queryLcp(i, j);
if(len >= distMn && dist < distPrev)
return true;
if(len < distMn && ((s[i + len] < s[j + len]) ^ inv))
return true;
return false;
};
RFOR(i, n, 0)
{
while (SZ(st) > 1 && pop(i))
st.pop_back();
int j = st.back();
st.PB(i);
int x = (i > 0 && s[i - 1] == s[j - 1]) ? rev.queryLcp(n - i, n - j) : 0;
int dist = j - i;
if (x < dist)
{
int y = lcp.queryLcp(i, j);
if (x + y >= dist)
runs.push_back({dist, i - x, j + y});
}
}
}
assert(SZ(runs) <= SZ(s));
sort(runs.begin(), runs.end());
runs.erase(unique(runs.begin(), runs.end()), runs.end());
assert(SZ(runs) <= SZ(s) / 2);
return runs;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n, q;
cin >> n >> q;
string s;
cin >> s;
VI vs(SZ(s));
FOR(i, 0, SZ(s))
vs[i] = s[i] - 'a';
auto res = solve(vs);
while(q--)
{
int L, R;
cin >> L >> R;
L--;
PII ans = MP(0, -L);
for(auto [len, l, r] : res)
{
l = max(l, L);
r = min(r, R);
if(l + 2 * len <= r)
{
int cnt = (r - l) / (2 * len);
ans = max(ans, MP(cnt * len, -l));
}
}
cout << ans.F << " " << -ans.S + 1 << "\n";
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 1ms
memory: 3764kb
input:
1000 100 qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqxqqqqqqqqqqqqqqqqqqqxqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqxqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqxqqqqqqqq...
output:
26 92 20 466 1 248 50 672 39 284 0 1 37 507 109 624 79 252 2 299 3 754 185 624 27 67 183 624 8 294 39 698 79 1 13 433 2 994 1 2 184 624 58 43 144 284 37 363 157 624 147 624 25 666 11 979 71 363 3 495 7 987 0 312 144 284 25 312 4 529 25 6 49 60 73 624 12 130 40 672 144 284 7 450 119 624 188 624 8 592...
result:
ok 100 lines
Test #2:
score: 0
Accepted
time: 1ms
memory: 4060kb
input:
999 90 zczzzcczczcczzcczczccczzczzczzczzzccczzzzzczczzczzczzczczzcczzczzzzcczzczzzzzzzzzzczczczccczzzzzczzcczzcczzccczczzzzzzzzzzcczzcczczzzzzzccczczzzzzczzccccccczcczzcczccczzczcczczzzzcczcczcczcczccccczczccczzzccczzzczzczzczzcccczzzzzcczzzcczccczcczcccczcccczzzzzzczzzzczczzcczzccczcczcczzcczcccccz...
output:
8 637 7 340 1 997 6 962 8 637 3 979 6 542 0 998 5 782 7 234 0 2 8 637 8 637 0 540 0 1 8 637 2 7 7 340 7 234 7 234 9 57 7 234 6 542 0 870 0 871 3 295 6 962 6 962 8 637 2 7 8 637 8 637 7 234 6 542 9 4 5 747 5 242 9 59 7 234 0 1 8 637 1 780 9 57 5 712 7 876 9 57 7 340 6 620 2 64 0 22 1 985 8 637 9 57 3...
result:
ok 90 lines
Test #3:
score: 0
Accepted
time: 1ms
memory: 3984kb
input:
994 99 svsssksksssvsssssvssvssssvvssssssksssvsssssssssvvsssssssssvsssvssssssssssssvsvvsssssssssssssssvssssssvssssvssssssvssvsssssvvskvvssvvvssssvsssysssksvvsssssssssssssssssvsssskssvsssksssssssssvksvsvskvvvskvsssssvvssvksskssssssssvvsssssvsvsksssvsvssssssssksvsssssvssvsssyvsssvksvsssvsvssvssvsssvsss...
output:
12 352 12 352 12 91 1 109 12 92 6 681 2 888 6 421 12 91 6 876 6 876 12 91 12 352 12 352 12 91 6 681 3 951 12 352 12 91 6 580 5 904 6 580 5 599 12 352 6 580 12 352 12 91 0 1 6 580 12 352 12 91 0 1 0 102 6 580 12 352 12 352 0 1 6 580 4 217 12 91 11 38 12 352 6 580 6 580 12 91 6 580 0 49 12 352 12 91 1...
result:
ok 99 lines
Test #4:
score: 0
Accepted
time: 1ms
memory: 3776kb
input:
995 93 yvyyvzypvpzypvzyzyvyyvpvpvzyzyyyypyvvpzvvzppzzyppypyvzzvzzyvpyyvvzzzpvypvppvvyyvypyvyzpvvzppppzvvyvyypyzzpzpzyzpzyvvvppyvyyyzpvvzyypzyyzpyppvyzpvvzpvzpzyppzzpzzypyzyvpyvvzyvyvypzvzyzzppyzyzvyyypvzvypzvzzyyvzyyypyzyvzyyyyypyzyypvzzzzzpzzppppzypvppyyvppyvvzzyzpzyzpyppvpyzvyvzzyzvpzvyyyyzzvzyvzz...
output:
1 480 0 681 1 54 5 780 5 780 4 107 0 50 5 780 5 780 4 256 1 3 2 962 0 579 1 933 4 256 4 256 0 574 5 780 2 776 4 623 5 780 5 780 5 780 5 780 4 107 5 780 4 107 2 282 4 107 1 994 1 994 0 131 5 780 0 6 3 490 0 711 5 780 5 780 3 155 3 490 5 780 4 107 5 780 2 356 5 780 1 973 2 986 0 725 4 256 3 439 3 439 ...
result:
ok 93 lines
Test #5:
score: 0
Accepted
time: 1ms
memory: 4056kb
input:
998 100 vhhhhhhhhvhhqhyhhvhyvhyhhhhhhhhhvhhhhqqhhhhhhhhhychhvhhvhhhhhhhhhhhhhhbhhhvqhnhhhhvvhhhhhhhhhhvhhvhhvhhghhhhhyhhhnhhhhvhvhqyhhhhvhhhhyhhhhhhhhhhyhhhhhcvvhvhhhhvvhhhvyyhhhhhvhhhvhnhhhvhzvhhhyhhqhyhhhzhhnhhqhvhhhhqhhvhhhhhvvhvhqhhhhbhhhhhhhhhqhyhvhhhhhyvzhhhhhqhnhvhqhhhhzhnhhhhvhbqhqqhvcnghhhh...
output:
2 994 8 414 8 414 1 672 2 733 8 414 6 418 1 188 8 414 1 208 5 988 8 414 0 847 8 414 7 57 0 724 0 800 0 81 0 522 4 232 5 57 8 414 4 170 8 414 0 686 4 632 4 2 8 414 8 414 3 421 4 632 0 542 3 4 2 2 0 585 5 135 3 573 4 40 8 414 4 2 8 414 7 57 0 121 4 959 0 998 4 632 5 988 8 414 8 414 8 414 8 414 1 951 4...
result:
ok 100 lines
Test #6:
score: 0
Accepted
time: 1ms
memory: 3852kb
input:
996 100 historyofthedeclineandfalloftheromanempireedwardgibbonesqwithnotesbytherevhhmilmanvolintroductionprefacebytheeditorthegreatworkofgibbonisindispensabletothestudentofhistorytheliteratureofeuropeoffersnosubstituteforthedeclineandfalloftheromanempireithasobtainedundisputedpossessionasrightfulocc...
output:
1 976 0 1 3 439 3 439 0 1 1 485 3 439 0 1 1 508 0 1 1 586 3 439 3 439 3 439 1 957 1 838 3 439 3 439 3 439 1 109 3 439 1 586 3 439 2 404 3 439 1 485 3 439 0 767 3 439 1 25 0 368 3 439 0 239 1 485 3 439 1 957 1 75 3 439 1 508 3 439 1 586 3 439 1 957 1 75 3 439 0 650 0 970 1 194 0 1 2 404 3 439 3 439 0...
result:
ok 100 lines
Test #7:
score: 0
Accepted
time: 1ms
memory: 3832kb
input:
998 98 uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu...
output:
122 106 27 307 11 459 1 77 1 997 4 268 2 27 6 1 338 25 308 40 178 492 78 208 189 407 451 70 40 587 31 194 490 15 498 2 180 317 486 5 48 580 12 349 16 964 13 668 95 237 0 371 10 1 205 518 38 470 25 277 7 303 353 142 272 365 220 350 1 972 388 110 1 147 272 444 383 219 4 472 12 152 3 993 37 32 135 722 ...
result:
ok 98 lines
Test #8:
score: 0
Accepted
time: 1ms
memory: 4012kb
input:
1000 100 eueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueue...
output:
250 471 222 273 238 1 32 840 464 44 460 32 248 447 316 192 4 15 260 335 322 48 38 363 332 10 10 252 0 634 470 13 80 570 240 159 220 94 6 780 66 1 2 216 126 77 0 2 14 1 2 311 10 978 148 86 180 97 304 306 16 621 270 343 2 121 490 15 88 689 0 663 10 9 8 9 0 999 54 59 114 498 36 929 72 181 4 822 350 85 ...
result:
ok 100 lines
Test #9:
score: 0
Accepted
time: 1ms
memory: 3856kb
input:
993 100 lssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlslssllslrlsls...
output:
80 275 110 28 180 542 440 63 250 444 350 190 260 141 60 255 90 723 430 120 250 177 10 698 470 38 220 150 240 148 270 95 120 12 30 879 330 316 90 229 450 14 30 262 60 363 2 29 80 320 110 402 2 449 2 129 250 287 0 194 100 627 70 274 10 69 410 78 280 330 1 74 70 274 100 483 360 150 200 496 250 159 240 ...
result:
ok 100 lines
Test #10:
score: 0
Accepted
time: 1ms
memory: 3776kb
input:
993 91 rrtertrreeerttteeeetttrretetererrtertrreeerttteeeetttrretetererrtertrreeerttteeeetttrretetererrtertrreeerttteeeetttrretetererrtertrreeerttteeeetttrretetererrtertrreeerttteeeetttrretetererrtertrreeerttteeeetttrretetererrtertrreeerttteeeetttrretetererrtertrreeerttteeeetttrretetererrtertrreeertt...
output:
217 489 341 75 186 511 31 527 310 295 93 25 186 576 310 107 2 521 2 16 0 473 403 142 2 419 279 149 217 349 341 212 2 822 2 574 2 481 2 149 31 22 31 227 310 54 186 286 62 290 155 315 93 640 31 79 2 16 217 355 31 634 62 815 186 592 186 463 2 16 341 155 465 18 186 434 1 1 31 26 2 398 2 986 2 490 2 955 ...
result:
ok 91 lines
Test #11:
score: -100
Runtime Error
input:
1000 100 iijiijijiijiijijiijijiijiijijiijiijijiijijiijiijijiijijiijiijijiijiijijiijijiijiijijiijiijijiijijiijiijijiijijiijiijijiijiijijiijijiijiijijiijijiijiijijiijiijijiijijiijiijijiijiijijiijijiijiijijiijijiijiijijiijiijijiijijiijiijijiijiijijiijijiijiijijiijijiijiijijiijiijijiijijiijiijijiijijiij...