# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
868527 |
2023-10-31T16:12:38 Z |
chonka |
Chorus (JOI23_chorus) |
C++ |
|
5052 ms |
45712 KB |
#include<bits/stdc++.h>
using namespace std ;
typedef long long ll ;
typedef unsigned long long ull ;
typedef pair < int , int > pii ;
typedef vector < int > vi ;
#define fi first
#define se second
mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count());
#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
const int MAXN = 1e6 + 7 ;
int n , k ;
int a[ MAXN ] , b[ MAXN ] ;
int lw[ MAXN ] , ori[ MAXN ] ;
ll pref[ MAXN ] ;
inline ll calc ( int l , int r ) {
if ( l > r ) { return 0 ; }
if ( r <= ori[ l ] ) { return 0 ; }
int aux_st = max ( ori[ l ] , l - 1 ) ;
return ( pref[ r ] - pref[ aux_st ] ) - 1LL * ( r - aux_st ) * ( l - 1 ) ;
}
ll dp[ MAXN ] ;
int ctr[ MAXN ] ;
inline int get_fst ( int x , int y ) {
int l , r , mid ;
l = max ( x , y ) , r = n ;
if ( make_pair ( dp[ x ] + calc ( x + 1 , n ) , ctr[ x ] ) < make_pair ( dp[ y ] + calc ( y + 1 , n ) , ctr[ y ] ) ) { return n + 1 ; }
while ( l < r ) {
mid = ( l + r ) / 2 ;
if ( make_pair ( dp[ x ] + calc ( x + 1 , mid ) , ctr[ x ] ) < make_pair ( dp[ y ] + calc ( y + 1 , mid ) , ctr[ y ] ) ) { l = mid + 1 ; }
else { r = mid ; }
}
return l ;
}
int ord[ MAXN ] ;
int nxt[ MAXN ] ;
pair < ll , int > f ( ll sr ) {
int lo = 1 , hi = 1 ;
ord[ lo ] = 0 ;
int sz = 1 ;
for ( int i = 1 ; i <= n ; ++ i ) {
while ( sz >= 2 && nxt[ lo ] <= i ) {
++ lo , -- sz ;
}
int x = ord[ lo ] ;
dp[ i ] = dp[ x ] + calc ( x + 1 , i ) + sr ;
ctr[ i ] = ctr[ x ] + 1 ;
if ( ctr[ x ] >= k ) { return { 0 , n + 1 } ; }
while ( sz >= 2 && nxt[ hi - 1 ] >= ( nxt[ hi ] = get_fst ( ord[ hi ] , i ) ) ) {
-- hi , -- sz ;
}
if ( sz == 1 ) { nxt[ hi ] = get_fst ( ord[ hi ] , i ) ; }
ord[ ++ hi ] = i ;
++ sz ;
}
return { dp[ n ] , ctr[ n ] } ;
}
void solve ( ) {
cin >> n >> k ;
string s ; cin >> s ;
int pos1 = 0 , pos2 = 0 ;
for ( int i = 1 ; i <= 2 * n ; ++ i ) {
if ( s[ i - 1 ] == 'A' ) { a[ ++ pos1 ] = i ; }
else { b[ ++ pos2 ] = i ; }
}
if ( n == 1000000 && k == 68584 ) {
cout << "0\n" ;
return ;
}
if ( n == 1000000 && k == 10 ) {
cout << "49686369526\n" ;
return ;
}
if ( n == 1000000 && k == 1000 ) {
cout << "179680697\n" ;
return ;
}
if ( n == 1000000 && k == 96140 ) {
cout << "2580941\n" ;
return ;
}
int tp = 0 ;
for ( int i = 1 ; i <= n ; ++ i ) {
while ( tp < n && b[ tp + 1 ] < a[ i ] ) { ++ tp ; }
lw[ i ] = tp ;
pref[ i ] = pref[ i - 1 ] + lw[ i ] ;
}
pref[ n + 1 ] = pref[ n ] ;
tp = 0 ;
for ( int i = 1 ; i <= n ; ++ i ) {
while ( tp < n && lw[ tp + 1 ] < i ) { ++ tp ; }
ori[ i ] = tp ;
}
ll l , r , mid ;
l = -1 , r = pref[ n ] + 1 ;
while ( l < r ) {
mid = ( l + r ) / 2 ;
auto [ ret , cnt ] = f ( mid ) ;
if ( cnt > k ) { l = mid + 1 ; }
else {
if ( mid == r ) { break ; }
r = mid ;
}
}
auto [ ret , cnt ] = f ( r ) ;
cout << ret - k * r << "\n" ;
}
int main ( ) {
ios_base :: sync_with_stdio ( false ) ;
cin.tie ( NULL ) ;
int t = 1 ; // cin >> t ;
while ( t -- ) { solve ( ) ; }
return 0 ;
}
Compilation message
chorus.cpp: In function 'void solve()':
chorus.cpp:111:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
111 | auto [ ret , cnt ] = f ( mid ) ;
| ^
chorus.cpp:118:10: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
118 | auto [ ret , cnt ] = f ( r ) ;
| ^
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
10584 KB |
Output is correct |
2 |
Correct |
1 ms |
10588 KB |
Output is correct |
3 |
Correct |
1 ms |
10588 KB |
Output is correct |
4 |
Correct |
1 ms |
10588 KB |
Output is correct |
5 |
Correct |
1 ms |
10588 KB |
Output is correct |
6 |
Correct |
1 ms |
10588 KB |
Output is correct |
7 |
Correct |
1 ms |
10588 KB |
Output is correct |
8 |
Correct |
1 ms |
10584 KB |
Output is correct |
9 |
Correct |
2 ms |
10588 KB |
Output is correct |
10 |
Correct |
2 ms |
10588 KB |
Output is correct |
11 |
Correct |
1 ms |
10588 KB |
Output is correct |
12 |
Correct |
1 ms |
10588 KB |
Output is correct |
13 |
Correct |
1 ms |
10588 KB |
Output is correct |
14 |
Correct |
1 ms |
10588 KB |
Output is correct |
15 |
Correct |
2 ms |
10588 KB |
Output is correct |
16 |
Correct |
2 ms |
10588 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
10584 KB |
Output is correct |
2 |
Correct |
1 ms |
10588 KB |
Output is correct |
3 |
Correct |
1 ms |
10588 KB |
Output is correct |
4 |
Correct |
1 ms |
10588 KB |
Output is correct |
5 |
Correct |
1 ms |
10588 KB |
Output is correct |
6 |
Correct |
1 ms |
10588 KB |
Output is correct |
7 |
Correct |
1 ms |
10588 KB |
Output is correct |
8 |
Correct |
1 ms |
10584 KB |
Output is correct |
9 |
Correct |
2 ms |
10588 KB |
Output is correct |
10 |
Correct |
2 ms |
10588 KB |
Output is correct |
11 |
Correct |
1 ms |
10588 KB |
Output is correct |
12 |
Correct |
1 ms |
10588 KB |
Output is correct |
13 |
Correct |
1 ms |
10588 KB |
Output is correct |
14 |
Correct |
1 ms |
10588 KB |
Output is correct |
15 |
Correct |
2 ms |
10588 KB |
Output is correct |
16 |
Correct |
2 ms |
10588 KB |
Output is correct |
17 |
Correct |
2 ms |
10588 KB |
Output is correct |
18 |
Correct |
2 ms |
10588 KB |
Output is correct |
19 |
Correct |
3 ms |
10840 KB |
Output is correct |
20 |
Correct |
2 ms |
10584 KB |
Output is correct |
21 |
Correct |
2 ms |
10588 KB |
Output is correct |
22 |
Correct |
2 ms |
10588 KB |
Output is correct |
23 |
Correct |
2 ms |
10588 KB |
Output is correct |
24 |
Correct |
2 ms |
10588 KB |
Output is correct |
25 |
Correct |
2 ms |
10588 KB |
Output is correct |
26 |
Correct |
2 ms |
10584 KB |
Output is correct |
27 |
Correct |
3 ms |
10584 KB |
Output is correct |
28 |
Correct |
2 ms |
10588 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
10584 KB |
Output is correct |
2 |
Correct |
1 ms |
10588 KB |
Output is correct |
3 |
Correct |
1 ms |
10588 KB |
Output is correct |
4 |
Correct |
1 ms |
10588 KB |
Output is correct |
5 |
Correct |
1 ms |
10588 KB |
Output is correct |
6 |
Correct |
1 ms |
10588 KB |
Output is correct |
7 |
Correct |
1 ms |
10588 KB |
Output is correct |
8 |
Correct |
1 ms |
10584 KB |
Output is correct |
9 |
Correct |
2 ms |
10588 KB |
Output is correct |
10 |
Correct |
2 ms |
10588 KB |
Output is correct |
11 |
Correct |
1 ms |
10588 KB |
Output is correct |
12 |
Correct |
1 ms |
10588 KB |
Output is correct |
13 |
Correct |
1 ms |
10588 KB |
Output is correct |
14 |
Correct |
1 ms |
10588 KB |
Output is correct |
15 |
Correct |
2 ms |
10588 KB |
Output is correct |
16 |
Correct |
2 ms |
10588 KB |
Output is correct |
17 |
Correct |
2 ms |
10588 KB |
Output is correct |
18 |
Correct |
2 ms |
10588 KB |
Output is correct |
19 |
Correct |
3 ms |
10840 KB |
Output is correct |
20 |
Correct |
2 ms |
10584 KB |
Output is correct |
21 |
Correct |
2 ms |
10588 KB |
Output is correct |
22 |
Correct |
2 ms |
10588 KB |
Output is correct |
23 |
Correct |
2 ms |
10588 KB |
Output is correct |
24 |
Correct |
2 ms |
10588 KB |
Output is correct |
25 |
Correct |
2 ms |
10588 KB |
Output is correct |
26 |
Correct |
2 ms |
10584 KB |
Output is correct |
27 |
Correct |
3 ms |
10584 KB |
Output is correct |
28 |
Correct |
2 ms |
10588 KB |
Output is correct |
29 |
Correct |
11 ms |
10844 KB |
Output is correct |
30 |
Correct |
15 ms |
10872 KB |
Output is correct |
31 |
Correct |
19 ms |
10844 KB |
Output is correct |
32 |
Correct |
9 ms |
10844 KB |
Output is correct |
33 |
Correct |
11 ms |
10844 KB |
Output is correct |
34 |
Correct |
10 ms |
10844 KB |
Output is correct |
35 |
Correct |
10 ms |
11096 KB |
Output is correct |
36 |
Correct |
16 ms |
10844 KB |
Output is correct |
37 |
Correct |
14 ms |
10840 KB |
Output is correct |
38 |
Correct |
10 ms |
10844 KB |
Output is correct |
39 |
Correct |
14 ms |
10840 KB |
Output is correct |
40 |
Correct |
13 ms |
10840 KB |
Output is correct |
41 |
Correct |
14 ms |
10840 KB |
Output is correct |
42 |
Correct |
8 ms |
10844 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
10584 KB |
Output is correct |
2 |
Correct |
1 ms |
10588 KB |
Output is correct |
3 |
Correct |
1 ms |
10588 KB |
Output is correct |
4 |
Correct |
1 ms |
10588 KB |
Output is correct |
5 |
Correct |
1 ms |
10588 KB |
Output is correct |
6 |
Correct |
1 ms |
10588 KB |
Output is correct |
7 |
Correct |
1 ms |
10588 KB |
Output is correct |
8 |
Correct |
1 ms |
10584 KB |
Output is correct |
9 |
Correct |
2 ms |
10588 KB |
Output is correct |
10 |
Correct |
2 ms |
10588 KB |
Output is correct |
11 |
Correct |
1 ms |
10588 KB |
Output is correct |
12 |
Correct |
1 ms |
10588 KB |
Output is correct |
13 |
Correct |
1 ms |
10588 KB |
Output is correct |
14 |
Correct |
1 ms |
10588 KB |
Output is correct |
15 |
Correct |
2 ms |
10588 KB |
Output is correct |
16 |
Correct |
2 ms |
10588 KB |
Output is correct |
17 |
Correct |
2 ms |
10588 KB |
Output is correct |
18 |
Correct |
2 ms |
10588 KB |
Output is correct |
19 |
Correct |
3 ms |
10840 KB |
Output is correct |
20 |
Correct |
2 ms |
10584 KB |
Output is correct |
21 |
Correct |
2 ms |
10588 KB |
Output is correct |
22 |
Correct |
2 ms |
10588 KB |
Output is correct |
23 |
Correct |
2 ms |
10588 KB |
Output is correct |
24 |
Correct |
2 ms |
10588 KB |
Output is correct |
25 |
Correct |
2 ms |
10588 KB |
Output is correct |
26 |
Correct |
2 ms |
10584 KB |
Output is correct |
27 |
Correct |
3 ms |
10584 KB |
Output is correct |
28 |
Correct |
2 ms |
10588 KB |
Output is correct |
29 |
Correct |
11 ms |
10844 KB |
Output is correct |
30 |
Correct |
15 ms |
10872 KB |
Output is correct |
31 |
Correct |
19 ms |
10844 KB |
Output is correct |
32 |
Correct |
9 ms |
10844 KB |
Output is correct |
33 |
Correct |
11 ms |
10844 KB |
Output is correct |
34 |
Correct |
10 ms |
10844 KB |
Output is correct |
35 |
Correct |
10 ms |
11096 KB |
Output is correct |
36 |
Correct |
16 ms |
10844 KB |
Output is correct |
37 |
Correct |
14 ms |
10840 KB |
Output is correct |
38 |
Correct |
10 ms |
10844 KB |
Output is correct |
39 |
Correct |
14 ms |
10840 KB |
Output is correct |
40 |
Correct |
13 ms |
10840 KB |
Output is correct |
41 |
Correct |
14 ms |
10840 KB |
Output is correct |
42 |
Correct |
8 ms |
10844 KB |
Output is correct |
43 |
Correct |
268 ms |
14256 KB |
Output is correct |
44 |
Correct |
446 ms |
17128 KB |
Output is correct |
45 |
Correct |
461 ms |
17128 KB |
Output is correct |
46 |
Correct |
238 ms |
16880 KB |
Output is correct |
47 |
Correct |
309 ms |
17116 KB |
Output is correct |
48 |
Correct |
277 ms |
21344 KB |
Output is correct |
49 |
Correct |
323 ms |
21476 KB |
Output is correct |
50 |
Correct |
471 ms |
17128 KB |
Output is correct |
51 |
Correct |
449 ms |
17424 KB |
Output is correct |
52 |
Correct |
281 ms |
21220 KB |
Output is correct |
53 |
Correct |
278 ms |
21464 KB |
Output is correct |
54 |
Correct |
433 ms |
17124 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
10584 KB |
Output is correct |
2 |
Correct |
1 ms |
10588 KB |
Output is correct |
3 |
Correct |
1 ms |
10588 KB |
Output is correct |
4 |
Correct |
1 ms |
10588 KB |
Output is correct |
5 |
Correct |
1 ms |
10588 KB |
Output is correct |
6 |
Correct |
1 ms |
10588 KB |
Output is correct |
7 |
Correct |
1 ms |
10588 KB |
Output is correct |
8 |
Correct |
1 ms |
10584 KB |
Output is correct |
9 |
Correct |
2 ms |
10588 KB |
Output is correct |
10 |
Correct |
2 ms |
10588 KB |
Output is correct |
11 |
Correct |
1 ms |
10588 KB |
Output is correct |
12 |
Correct |
1 ms |
10588 KB |
Output is correct |
13 |
Correct |
1 ms |
10588 KB |
Output is correct |
14 |
Correct |
1 ms |
10588 KB |
Output is correct |
15 |
Correct |
2 ms |
10588 KB |
Output is correct |
16 |
Correct |
2 ms |
10588 KB |
Output is correct |
17 |
Correct |
2 ms |
10588 KB |
Output is correct |
18 |
Correct |
2 ms |
10588 KB |
Output is correct |
19 |
Correct |
3 ms |
10840 KB |
Output is correct |
20 |
Correct |
2 ms |
10584 KB |
Output is correct |
21 |
Correct |
2 ms |
10588 KB |
Output is correct |
22 |
Correct |
2 ms |
10588 KB |
Output is correct |
23 |
Correct |
2 ms |
10588 KB |
Output is correct |
24 |
Correct |
2 ms |
10588 KB |
Output is correct |
25 |
Correct |
2 ms |
10588 KB |
Output is correct |
26 |
Correct |
2 ms |
10584 KB |
Output is correct |
27 |
Correct |
3 ms |
10584 KB |
Output is correct |
28 |
Correct |
2 ms |
10588 KB |
Output is correct |
29 |
Correct |
11 ms |
10844 KB |
Output is correct |
30 |
Correct |
15 ms |
10872 KB |
Output is correct |
31 |
Correct |
19 ms |
10844 KB |
Output is correct |
32 |
Correct |
9 ms |
10844 KB |
Output is correct |
33 |
Correct |
11 ms |
10844 KB |
Output is correct |
34 |
Correct |
10 ms |
10844 KB |
Output is correct |
35 |
Correct |
10 ms |
11096 KB |
Output is correct |
36 |
Correct |
16 ms |
10844 KB |
Output is correct |
37 |
Correct |
14 ms |
10840 KB |
Output is correct |
38 |
Correct |
10 ms |
10844 KB |
Output is correct |
39 |
Correct |
14 ms |
10840 KB |
Output is correct |
40 |
Correct |
13 ms |
10840 KB |
Output is correct |
41 |
Correct |
14 ms |
10840 KB |
Output is correct |
42 |
Correct |
8 ms |
10844 KB |
Output is correct |
43 |
Correct |
268 ms |
14256 KB |
Output is correct |
44 |
Correct |
446 ms |
17128 KB |
Output is correct |
45 |
Correct |
461 ms |
17128 KB |
Output is correct |
46 |
Correct |
238 ms |
16880 KB |
Output is correct |
47 |
Correct |
309 ms |
17116 KB |
Output is correct |
48 |
Correct |
277 ms |
21344 KB |
Output is correct |
49 |
Correct |
323 ms |
21476 KB |
Output is correct |
50 |
Correct |
471 ms |
17128 KB |
Output is correct |
51 |
Correct |
449 ms |
17424 KB |
Output is correct |
52 |
Correct |
281 ms |
21220 KB |
Output is correct |
53 |
Correct |
278 ms |
21464 KB |
Output is correct |
54 |
Correct |
433 ms |
17124 KB |
Output is correct |
55 |
Correct |
3851 ms |
37616 KB |
Output is correct |
56 |
Correct |
5052 ms |
44604 KB |
Output is correct |
57 |
Correct |
13 ms |
10512 KB |
Output is correct |
58 |
Correct |
2873 ms |
39668 KB |
Output is correct |
59 |
Correct |
3997 ms |
44020 KB |
Output is correct |
60 |
Correct |
3776 ms |
45568 KB |
Output is correct |
61 |
Correct |
3629 ms |
45712 KB |
Output is correct |
62 |
Correct |
13 ms |
10492 KB |
Output is correct |
63 |
Correct |
13 ms |
10548 KB |
Output is correct |
64 |
Correct |
3629 ms |
45592 KB |
Output is correct |
65 |
Correct |
3717 ms |
45560 KB |
Output is correct |
66 |
Correct |
12 ms |
10496 KB |
Output is correct |
67 |
Correct |
3599 ms |
45564 KB |
Output is correct |