QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#630733#7901. Basic Substring StructureWolamWA 74ms43400kbC++175.5kb2024-10-11 20:11:132024-10-11 20:11:14

Judging History

你现在查看的是最新测评结果

  • [2024-10-11 20:11:14]
  • 评测
  • 测评结果:WA
  • 用时:74ms
  • 内存:43400kb
  • [2024-10-11 20:11:13]
  • 提交

answer

#include<bits/stdc++.h>
#define endl "\n"
#define int long long
using namespace std;
using ll = long long;
const int maxn = 2e5 + 10;
const int mod = 998244353;
const int p = 13331;
ll arr[maxn];
unsigned long long f[maxn],pw[maxn];
ll z[maxn],ans[maxn],add=0,ctr[maxn];
vector<int> pidx[maxn],sidx[maxn];
struct Fenwick
{
    static const int maxn = 2e5 + 10;
    static const int N = 2e5 + 3;
    int h[maxn],clk[maxn],CLK;
    int lowbit(int x)
    {
        return x&-x;
    }
    void update(int idx,int k)
    {
        if(!idx)
        {
            h[0]+=k;
            return;
        }
        while(idx<=N)
        {
            if(clk[idx]!=CLK)
            {
                clk[idx]=CLK;
                h[idx]=0;
            }
            h[idx]+=k;
            idx+=lowbit(idx);
        }
    }
    ll query(ll idx)
    {
        if(idx<0)
        {
            return 0;
        }
        ll res=h[0];
        while(idx)
        {
            if(clk[idx]==CLK)
            {
                res+=h[idx];
            }
            idx-=lowbit(idx);
        }
        return res;
    }
    ll query(ll l,ll r)
    {
        return query(r)-query(l-1);
    }
    void clear(void)
    {
        CLK++;
        h[0]=0;
    }
}psum,pcnt,pchg,ssum,scnt;
void init(int n)
{
    for(int i=0;i<=n+1;i++)
    {
        z[i]=ans[i]=ctr[i]=0;
        pidx[i].clear();
        sidx[i].clear();
    }
    psum.clear();
    pcnt.clear();
    pchg.clear();
    ssum.clear();
    scnt.clear();
}
unsigned long long gethash(int l,int r)
{
    if(l>r)
    {
        return 0;
    }
    return f[r]-f[l-1]*pw[r-l+1];
}
bool same(int l1,int r1,int l2,int r2)
{
    if(l1>r1||l2>r2||(r1-l1+1)!=(r2-l2+1))
    {
        return false;
    }
    return gethash(l1,r1)==gethash(l2,r2);
}
void solve(void)
{
    int n;
    cin>>n;
    init(n);
    pw[0]=1;
    for(int i=1;i<=n;i++)
    {
        cin>>arr[i];
        pw[i]=pw[i-1]*p;
        f[i]=(f[i-1]*p+arr[i]);
    }
    for(int i=1;i<=n;i++)
    {
        int l=0,r=n-i+1;
        while(l<r)
        {
            int mid=(l+r+1)>>1;
            if(same(1,mid,i,i+mid-1))
            {
                l=mid;
            }
            else
            {
                r=mid-1;
            }
        }
        z[i]=r;
    }
    for(int i=1;i<=n;i++)
    {
        ssum.update(z[i],z[i]);
        scnt.update(z[i],1);
        sidx[z[i]].emplace_back(i);
    }
    for(int i=1;i<=n;i++)
    {
        ssum.update(z[i],-z[i]);
        scnt.update(z[i],-1);
        if(i>1)
        {
            psum.update(i+z[i],z[i]);
            pcnt.update(i+z[i],1);
            pchg.update(i+z[i],-i);
            pidx[i+z[i]].emplace_back(i);
        }
        ans[i]=n+psum.query(i-1)+ssum.query(i-2)+(scnt.query(i,n+1)*(i-1))+(i*pcnt.query(i+1,n+1)+pchg.query(i+1,n+1));
        vector<int> vec;
        ll mx=0;
        add=0;
        for(const auto& idx : pidx[i])
        {
            int l=z[idx]+1,r=n-idx+1;
            while(l<r)
            {
                int mid=(l+r+1)>>1;
                if(mid>=i)
                {
                    if(((gethash(1,i-1)*pw[mid-(i-1)]+arr[z[idx]+1]*pw[mid-i])+gethash(i+1,mid))==((gethash(idx,idx+z[idx]-1)*pw[mid-z[idx]]+arr[z[idx]+1]*pw[mid-z[idx]-1])+gethash(idx+z[idx]+1,idx+mid-1)))
                    {
                        l=mid;
                    }
                    else
                    {
                        r=mid-1;
                    }
                }
                else
                {
                    if(gethash(1,mid)==((gethash(idx,idx+z[idx]-1)*pw[mid-z[idx]]+arr[z[idx]+1]*pw[mid-z[idx]-1])+gethash(idx+z[idx]+1,idx+mid-1)))
                    {
                        l=mid;
                    }
                    else
                    {
                        r=mid-1;
                    }
                }
            }
            add+=z[idx];
            vec.emplace_back(arr[z[idx]+1]);
            if(arr[z[idx]+1]!=arr[i])
            {
                vec.emplace_back(arr[z[idx]+1]);
                ctr[arr[z[idx]+1]]+=r-z[idx];
                mx=max(mx,ctr[arr[z[idx]+1]]);
            }
        }
        for(const auto& idx : sidx[i-1])
        {
            if(idx<=i)
            {
                continue;
            }
            int l=z[idx]+1,r=n-idx+1;
            while(l<r)
            {
                int mid=(l+r+1)>>1;
                if(((gethash(1,i-1)*pw[mid-(i-1)]+arr[z[idx]+idx]*pw[mid-i])+gethash(i+1,mid))==gethash(idx,idx+mid-1))
                {
                    l=mid;
                }
                else
                {
                    r=mid-1;
                }
            }
            add+=z[idx];
            if(idx+z[idx]<=n)
            {
                ctr[arr[idx+z[idx]]]+=r-z[idx];
                vec.emplace_back(arr[idx+z[idx]]);
                if(arr[idx+z[idx]]!=arr[i])
                {
                    mx=max(mx,ctr[arr[idx+z[idx]]]);
                }
            }
        }
        ans[i]+=mx+add;
        for(const auto& it : vec)
        {
            ctr[it]=0;
        }
    }
    ll final=0;
    for(int i=1;i<=n;i++)
    {
        final+=ans[i]^i;
    }
    cout<<final<<endl;
}
signed main(void)
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t;
    cin>>t;
    while(t--)
    {
        solve();
    }
    return 0;
}
/*
1
4
2 1 1 2
*/

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 3ms
memory: 28388kb

input:

2
4
2 1 1 2
12
1 1 4 5 1 4 1 9 1 9 8 10

output:

15
217

result:

ok 2 lines

Test #2:

score: 0
Accepted
time: 33ms
memory: 30348kb

input:

10000
8
2 1 2 1 1 1 2 2
9
2 2 1 2 1 2 1 2 1
15
2 1 2 1 1 1 1 2 2 1 2 1 2 2 1
2
1 1
10
2 1 1 1 2 2 1 1 2 2
3
2 1 2
11
1 2 2 1 1 2 1 2 2 1 1
14
2 1 1 1 1 2 1 1 1 2 2 1 2 1
12
2 2 2 1 2 2 2 1 1 2 1 2
4
2 1 1 2
8
1 2 2 2 1 2 1 1
8
1 1 2 1 2 1 1 1
6
2 1 1 1 2 2
14
2 2 1 1 1 1 2 2 2 1 2 2 1 1
10
1 2 2 1 1...

output:

94
128
347
3
211
9
265
363
278
15
95
114
58
348
225
3
335
364
377
316
3
19
122
66
15
83
36
258
11
63
28
90
85
103
252
191
21
48
303
63
102
20
24
68
316
362
266
309
355
281
326
281
231
312
3
330
54
328
3
69
32
147
322
39
338
90
242
3
165
346
245
20
155
3
404
393
392
81
269
360
20
54
21
279
3
17
351
3...

result:

ok 10000 lines

Test #3:

score: 0
Accepted
time: 46ms
memory: 30272kb

input:

10000
17
1 2 2 2 2 2 2 2 1 1 2 2 1 2 1 2 2
17
2 1 1 1 1 2 2 2 1 1 1 1 1 2 2 2 2
13
2 2 2 1 2 2 2 2 1 1 1 1 1
12
2 2 1 2 1 2 2 1 1 1 1 1
13
2 2 2 1 1 1 1 2 2 2 2 1 1
20
2 1 2 2 1 2 2 2 2 2 2 1 2 2 2 2 1 2 1 1
13
1 2 1 2 2 2 1 2 1 2 1 1 1
20
2 1 1 2 2 1 2 2 1 1 2 1 2 2 2 2 2 1 2 2
12
2 1 2 1 1 2 2 1 2...

output:

392
434
308
252
302
895
343
867
282
249
717
194
252
350
230
427
439
279
340
384
380
292
218
312
271
810
275
211
460
388
365
342
773
203
238
857
720
497
514
443
618
777
372
242
337
232
324
837
289
480
366
681
358
281
320
529
451
309
250
326
315
744
307
841
133
214
411
788
332
365
488
157
760
278
421
...

result:

ok 10000 lines

Test #4:

score: 0
Accepted
time: 45ms
memory: 30344kb

input:

10000
10
3 3 1 2 2 3 3 3 2 3
13
1 2 1 2 1 1 3 1 2 2 1 3 1
14
1 2 1 2 3 3 2 3 1 2 2 2 3 3
10
1 1 1 1 1 1 3 2 1 2
19
1 3 3 3 1 3 3 2 1 1 1 3 2 2 1 2 1 3 2
12
1 3 1 3 1 1 3 2 3 3 2 3
11
1 1 1 2 2 3 1 1 3 1 1
12
3 2 2 1 3 3 2 1 1 3 3 2
11
2 2 3 2 3 1 3 1 2 1 1
20
3 1 2 2 3 1 3 3 1 3 3 2 3 3 3 2 3 1 1 2
...

output:

191
285
325
207
420
281
215
280
151
754
365
199
94
418
318
377
414
285
373
362
111
358
332
117
185
326
89
404
229
386
307
285
421
232
321
329
506
372
386
364
153
582
313
356
152
129
424
366
382
280
363
370
273
294
388
389
807
388
459
280
114
310
211
368
150
166
793
211
793
393
102
427
399
408
584
38...

result:

ok 10000 lines

Test #5:

score: 0
Accepted
time: 34ms
memory: 28396kb

input:

10000
14
9 9 13 6 3 8 7 10 5 9 14 2 12 5
15
9 12 2 2 8 4 2 11 4 4 8 3 8 13 15
19
5 7 1 2 9 2 16 9 15 8 19 9 3 18 8 8 1 12 6
14
9 8 2 11 7 2 12 5 14 14 10 5 7 2
11
4 4 2 9 9 11 10 3 3 2 2
14
8 2 9 10 10 11 6 9 12 5 5 4 9 2
20
4 5 3 13 15 18 12 6 2 8 11 12 6 10 14 14 10 14 13 12
14
11 9 7 5 12 12 5 3 ...

output:

307
362
380
107
97
137
380
108
135
299
312
265
99
362
379
361
332
380
129
367
97
380
97
107
363
107
132
367
97
88
363
314
100
382
354
349
383
95
359
306
340
133
382
106
395
361
374
105
292
385
360
359
365
381
378
107
374
111
357
105
365
319
379
102
364
89
107
374
128
101
360
115
363
107
106
116
92
3...

result:

ok 10000 lines

Test #6:

score: 0
Accepted
time: 74ms
memory: 30416kb

input:

1331
128
1 1 2 1 1 1 1 1 1 1 1 1 1 2 2 2 1 1 2 1 2 2 1 1 2 1 2 1 2 1 2 2 1 2 1 2 2 2 1 2 1 2 2 2 2 2 1 2 1 2 2 1 1 2 2 1 1 1 1 2 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 2 2 2 2 2 1 2 1 2 1 2 2 1 1 2 1 1 2 2 2 1 1 2 2 2 1 2 2 2 1 2 1 1 1 2 2 1 1 1 2 1 1 1 1 1 1 1 2 2 2 2
115
1 2 2 1 2 2 1 2 2 1 2 1 2 2 2 1...

output:

41073
22779
19964
77764
77960
62759
68522
21651
24781
42049
74437
19840
74378
68878
20605
34809
20231
20004
50820
29156
52217
53156
23540
67367
57400
46500
19870
60423
66032
51371
59540
51300
48277
22751
77712
65779
21946
37124
65635
40091
27911
55656
54005
18564
25013
64077
46260
21753
62329
69899
...

result:

ok 1331 lines

Test #7:

score: 0
Accepted
time: 65ms
memory: 30620kb

input:

131
1471
2 3 2 3 1 2 2 1 1 1 1 2 1 3 2 1 1 1 2 2 2 2 2 2 3 1 3 2 1 2 3 2 3 1 3 1 2 1 3 1 3 1 3 2 2 1 3 3 3 1 1 1 3 2 2 2 1 2 1 3 1 3 3 1 2 2 1 2 3 1 3 1 3 3 2 1 3 3 2 3 2 2 2 1 3 2 1 2 2 1 3 1 1 3 2 3 1 1 2 1 2 3 2 1 3 3 2 2 2 2 1 1 1 2 3 1 1 3 3 2 3 2 1 3 1 3 3 2 2 1 2 1 1 2 1 3 2 1 2 2 3 2 2 1 1 3...

output:

4103972
1822893
4056671
4581950
1797128
5452459
5578024
6135700
4325429
1769997
1239977
1589696
5346072
1818448
5380837
3882106
3814365
1823901
4911982
5946018
5208392
4261893
1767953
5781183
4624024
1795249
1600563
1677098
4679442
4113663
1685240
1576241
5128042
1618422
4440641
4326472
5703872
3748...

result:

ok 131 lines

Test #8:

score: 0
Accepted
time: 56ms
memory: 30548kb

input:

131
1104
15 10 15 18 8 16 25 26 11 19 4 5 9 15 20 8 8 1 5 12 6 15 15 9 19 6 20 8 9 10 12 1 7 26 9 15 26 14 18 24 25 4 9 20 16 18 25 10 8 2 15 14 26 19 22 17 8 7 23 19 22 26 23 4 26 8 16 6 19 5 17 4 9 25 7 14 19 26 9 21 23 7 20 2 12 22 23 24 20 11 23 23 7 13 6 26 25 10 8 17 23 15 14 20 16 7 21 8 11 1...

output:

1585911
1671116
2074604
2071604
2066710
1571959
1699180
1597972
1573443
2062834
1968749
1670339
1696389
1700722
1574014
1673122
6093159
1965764
1966052
2084891
1597710
1989656
2054890
1659456
1601397
1982947
1675608
2075393
1694022
1992153
6012239
1675824
1987812
1589514
2063346
1986943
1571712
1671...

result:

ok 131 lines

Test #9:

score: 0
Accepted
time: 51ms
memory: 31676kb

input:

14
554
232 178 169 417 93 38 93 537 212 211 313 227 432 269 475 489 459 286 318 534 118 160 223 534 275 382 482 331 3 279 73 513 403 277 34 497 462 397 280 218 395 498 201 548 8 520 495 397 545 528 401 58 418 3 494 260 251 496 212 552 243 151 78 385 441 73 271 337 283 39 162 1 501 357 126 452 416 34...

output:

394027
127388087
408947528
132597056
403149770
403022905
410881136
404226176
134192573
106965642
108543004
108541542
109002658
408924618

result:

ok 14 lines

Test #10:

score: 0
Accepted
time: 70ms
memory: 43400kb

input:

1
200000
86045 57533 29508 181370 17680 186294 134595 82393 109229 189798 133533 194579 11412 112604 572 32659 76824 177596 106427 60375 98302 93821 34541 125615 108609 22507 166292 195457 151376 54630 166314 85832 192590 85410 149595 46737 54738 198246 56457 189628 135013 63949 28359 65601 162502 4...

output:

32219923494

result:

ok single line: '32219923494'

Test #11:

score: -100
Wrong Answer
time: 61ms
memory: 29932kb

input:

14
11651
1 2 2 1 2 1 1 2 2 1 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 1 2 2 1 2 1 1 2 2 1 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 1 2 2 1 2 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 1 2 1 2 2 1 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 2 1 1 2 1 2 2 1 1 2 2 1 2 1 1 2 1 2...

output:

897309401
1149324007
2844209346
1964515211
1180651043
1175994714
1973564003
2636166639
1290817699
1938617094
1181203347
318818309
1173941588
2091976663

result:

wrong answer 1st lines differ - expected: '638847269', found: '897309401'