QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#500922#3856. RepetitionsPetroTarnavskyiRE 1ms4060kbC++234.3kb2024-08-02 02:58:142024-08-02 02:58:14

Judging History

This is the latest submission verdict.

  • [2024-08-02 02:58:14]
  • Judged
  • Verdict: RE
  • Time: 1ms
  • Memory: 4060kb
  • [2024-08-02 02:58:14]
  • Submitted

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...

output:


result: