Task: | Vaihdot |
Sender: | Lieska |
Submission time: | 2020-09-06 12:04:51 +0300 |
Language: | C++ (C++17) |
Status: | READY |
Result: | 100 |
group | verdict | score |
---|---|---|
#1 | ACCEPTED | 13 |
#2 | ACCEPTED | 23 |
#3 | ACCEPTED | 64 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | ACCEPTED | 0.02 s | 1, 2, 3 | details |
#2 | ACCEPTED | 0.01 s | 1, 2, 3 | details |
#3 | ACCEPTED | 0.01 s | 1, 2, 3 | details |
#4 | ACCEPTED | 0.01 s | 1, 2, 3 | details |
#5 | ACCEPTED | 0.01 s | 1, 2, 3 | details |
#6 | ACCEPTED | 0.02 s | 1, 2, 3 | details |
#7 | ACCEPTED | 0.01 s | 1, 2, 3 | details |
#8 | ACCEPTED | 0.01 s | 1, 2, 3 | details |
#9 | ACCEPTED | 0.02 s | 2, 3 | details |
#10 | ACCEPTED | 0.02 s | 2, 3 | details |
#11 | ACCEPTED | 0.02 s | 2, 3 | details |
#12 | ACCEPTED | 0.02 s | 2, 3 | details |
#13 | ACCEPTED | 0.02 s | 2, 3 | details |
#14 | ACCEPTED | 0.02 s | 2, 3 | details |
#15 | ACCEPTED | 0.02 s | 2, 3 | details |
#16 | ACCEPTED | 0.02 s | 2, 3 | details |
#17 | ACCEPTED | 0.11 s | 3 | details |
#18 | ACCEPTED | 0.19 s | 3 | details |
#19 | ACCEPTED | 0.09 s | 3 | details |
#20 | ACCEPTED | 0.09 s | 3 | details |
#21 | ACCEPTED | 0.10 s | 3 | details |
#22 | ACCEPTED | 0.12 s | 3 | details |
#23 | ACCEPTED | 0.18 s | 3 | details |
#24 | ACCEPTED | 0.20 s | 3 | details |
Compiler report
input/code.cpp: In function 'int main()': input/code.cpp:94:30: warning: unused variable 'b' [-Wunused-variable] ll a=v[i][si-1], b=v[i+1].size(); ^
Code
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll t[555050], t1[202020], r[202020], M, h[202020][3][3], s[202020][3][3], s1[202020][4][3], n; vector<ll> p[202020], l[202020], v[202020]; ll test(){ ll x=0; for (ll i=1; i<=2*M+2; ++i) t[i]=0; for (ll i=1; i<=n; ++i){ for (auto u:p[i]) { ll a=u+M-1; while (a>0){ t[a]--; a/=2; } } for (auto u:l[i]){ ll a=u+M-1; while (a>0){ t[a]++; a/=2; } } if (h[i][1][1]){ ll a=h[i][1][1]+M-1, b=h[i][1][2]+M-1; while (a<=b){ if (a%2==1){ x+=t[a]; a++; } if (b%2==0){ x+=t[b]; b--; } a/=2; b/=2; } } if (h[i][2][1]){ ll a=h[i][2][1]+M-1, b=h[i][2][2]+M-1; while (a<=b){ if (a%2==1){ x+=t[a]; a++; } if (b%2==0){ x+=t[b]; b--; } a/=2; b/=2; } } } return x; } int main(){ cin >> n; M=1; while ((n+2)>M) M*=2; for (ll i=1; i<=n; ++i){ ll a; cin >> a; t1[i]=a; r[a]=i; } ll k=1; for (ll i=1; i<=n; ++i){ if (r[i]<r[i-1]) k++; v[k].push_back(r[i]); } for (ll i=1; i<=k; ++i){ ll si=v[i].size(); if (i!=1){ ll a=v[i][0], b=v[i-1].size(); if (si==1){ if (v[i-1][b-1]!=n){ s[a][1][1]=v[i-1][b-1]+1; s[a][1][2]=n; } } else{ if (v[i-1][b-1]<(v[i][1]-1)){ s[a][1][1]=v[i-1][b-1]+1; s[a][1][2]=v[i][1]-1; } } } if (i!=k){ ll a=v[i][si-1], b=v[i+1].size(); if (si==1){ if (v[i+1][0]!=1){ s[a][2][1]=1; s[a][2][2]=v[i+1][0]-1; } } else{ if (v[i][si-2]<(v[i+1][0]-1)){ s[a][2][1]=v[i][si-2]+1; s[a][2][2]=v[i+1][0]-1; } } } for (ll j=0; j<si; ++j){ ll a, b, c=v[i][j]; if (j==0) a=1; else a=v[i][j-1]+1; if (j==(si-1)) b=n; else b=v[i][j+1]-1; if (a<=c && b>=c){ if (a<c){ s1[c][1][1]=a; s1[c][1][2]=c-1; } if (b>c){ s1[c][2][1]=c+1; s1[c][2][2]=b; } } else{ s1[c][1][1]=a; s1[c][1][2]=b; } if (j==0 && si!=1 && i!=1){ int b=v[i-1].size(); if (v[i-1][b-1]!=n){ s1[c][3][1]=v[i-1][b-1]+1; s1[c][3][2]=n; } } if (j==si-1 && si!=1 && i!=k){ if (v[i+1][0]!=1){ s1[c][3][1]=1; s1[c][3][2]=v[i+1][0]-1; } } } } for (ll i=1; i<=n; ++i){ if (s[i][1][1]){ l[s[i][1][1]].push_back(i); p[s[i][1][2]+1].push_back(i); h[i][1][1]=s[i][1][1]; h[i][1][2]=s[i][1][2]; } if (s[i][2][1]){ l[s[i][2][1]].push_back(i); p[s[i][2][2]+1].push_back(i); h[i][2][1]=s[i][2][1]; h[i][2][2]=s[i][2][2]; } } ll ans=test(); if (ans){ cout << k-2 << " " << ans/2 << "\n"; return 0; } for (ll i=1; i<=n+1; ++i){ while (l[i].size()) l[i].pop_back(); while (p[i].size()) p[i].pop_back(); h[i][1][1]=0; h[i][1][2]=0; h[i][2][1]=0; h[i][2][2]=0; } for (ll i=1; i<=n; ++i){ if (s[i][1][1]){ h[i][1][1]=s[i][1][1]; h[i][1][2]=s[i][1][2]; } if (s[i][2][1]){ h[i][2][1]=s[i][2][1]; h[i][2][2]=s[i][2][2]; } if (s1[i][1][1]){ l[s1[i][1][1]].push_back(i); p[s1[i][1][2]+1].push_back(i); } if (s1[i][2][1]){ l[s1[i][2][1]].push_back(i); p[s1[i][2][2]+1].push_back(i); } if (s1[i][3][1]){ l[s1[i][3][1]].push_back(i); p[s1[i][3][2]+1].push_back(i); } } ans=test(); for (int i=1; i<k; ++i){ int k1=v[i].size(), k2=v[i+1].size(); if (k2==1 || v[i][k1-1]<v[i+1][1]){ if (k1==1 || v[i+1][0]>v[i][k1-2]) ans++; } } if (ans){ cout << k-1 << " " << ans << "\n"; return 0; } for (ll i=1; i<=n+1; ++i){ while (l[i].size()) l[i].pop_back(); while (p[i].size()) p[i].pop_back(); h[i][1][1]=0; h[i][1][2]=0; h[i][2][1]=0; h[i][2][2]=0; } for (ll i=1; i<=n; ++i){ if (s1[i][1][1]){ l[s1[i][1][1]].push_back(i); p[s1[i][1][2]+1].push_back(i); h[i][1][1]=s[i][1][1]; h[i][1][2]=s[i][1][2]; } if (s1[i][2][1]){ l[s1[i][2][1]].push_back(i); p[s1[i][2][2]+1].push_back(i); h[i][2][1]=s[i][2][1]; h[i][2][2]=s[i][2][2]; } } ans=test(); if (ans){ cout << k << " " << ans/2 << "\n"; return 0; } cout << k+1 << " " << n-1 << "\n"; }
Test details
Test 1
Group: 1, 2, 3
Verdict: ACCEPTED
input |
---|
100 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
correct output |
---|
2 99 |
user output |
---|
2 99 |
Test 2
Group: 1, 2, 3
Verdict: ACCEPTED
input |
---|
100 100 99 98 97 96 95 94 93 92 91... |
correct output |
---|
98 4851 |
user output |
---|
98 4851 |
Test 3
Group: 1, 2, 3
Verdict: ACCEPTED
input |
---|
100 1 2 88 4 5 6 7 8 9 10 11 12 13... |
correct output |
---|
16 5 |
user output |
---|
16 5 |
Test 4
Group: 1, 2, 3
Verdict: ACCEPTED
input |
---|
100 51 48 74 70 45 71 24 88 55 99 ... |
correct output |
---|
49 131 |
user output |
---|
49 131 |
Test 5
Group: 1, 2, 3
Verdict: ACCEPTED
input |
---|
100 45 67 29 62 70 77 41 74 52 95 ... |
correct output |
---|
52 268 |
user output |
---|
52 268 |
Test 6
Group: 1, 2, 3
Verdict: ACCEPTED
input |
---|
100 47 98 2 75 6 21 84 8 4 89 27 9... |
correct output |
---|
48 149 |
user output |
---|
48 149 |
Test 7
Group: 1, 2, 3
Verdict: ACCEPTED
input |
---|
100 73 68 17 94 71 63 61 13 58 10 ... |
correct output |
---|
47 116 |
user output |
---|
47 116 |
Test 8
Group: 1, 2, 3
Verdict: ACCEPTED
input |
---|
100 17 16 45 94 6 1 36 81 31 13 51... |
correct output |
---|
45 95 |
user output |
---|
45 95 |
Test 9
Group: 2, 3
Verdict: ACCEPTED
input |
---|
5000 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
correct output |
---|
2 4999 |
user output |
---|
2 4999 |
Test 10
Group: 2, 3
Verdict: ACCEPTED
input |
---|
5000 5000 4999 4998 4997 4996 4995 ... |
correct output |
---|
4998 12492501 |
user output |
---|
4998 12492501 |
Test 11
Group: 2, 3
Verdict: ACCEPTED
input |
---|
5000 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
correct output |
---|
19 10 |
user output |
---|
19 10 |
Test 12
Group: 2, 3
Verdict: ACCEPTED
input |
---|
5000 1 2 3 4 5 6 264 8 9 10 11 12 1... |
correct output |
---|
190 96 |
user output |
---|
190 96 |
Test 13
Group: 2, 3
Verdict: ACCEPTED
input |
---|
5000 1 2 3 4 5 6 7 8 9 2400 11 12 1... |
correct output |
---|
1378 27938 |
user output |
---|
1378 27938 |
Test 14
Group: 2, 3
Verdict: ACCEPTED
input |
---|
5000 4012 2 4820 4208 1868 1728 362... |
correct output |
---|
2511 436307 |
user output |
---|
2511 436307 |
Test 15
Group: 2, 3
Verdict: ACCEPTED
input |
---|
5000 3877 3972 1112 3669 1959 4640 ... |
correct output |
---|
2497 417065 |
user output |
---|
2497 417065 |
Test 16
Group: 2, 3
Verdict: ACCEPTED
input |
---|
5000 2774 998 4525 2884 487 1995 41... |
correct output |
---|
2518 426448 |
user output |
---|
2518 426448 |
Test 17
Group: 3
Verdict: ACCEPTED
input |
---|
200000 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
correct output |
---|
2 199999 |
user output |
---|
2 199999 |
Test 18
Group: 3
Verdict: ACCEPTED
input |
---|
200000 200000 199999 199998 199997 19... |
correct output |
---|
199998 19999700001 |
user output |
---|
199998 19999700001 |
Test 19
Group: 3
Verdict: ACCEPTED
input |
---|
200000 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
correct output |
---|
19 10 |
user output |
---|
19 10 |
Test 20
Group: 3
Verdict: ACCEPTED
input |
---|
200000 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
correct output |
---|
199 100 |
user output |
---|
199 100 |
Test 21
Group: 3
Verdict: ACCEPTED
input |
---|
200000 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
correct output |
---|
1979 1030 |
user output |
---|
1979 1030 |
Test 22
Group: 3
Verdict: ACCEPTED
input |
---|
200000 1 2 184153 4 5 6 7 8 164545 10... |
correct output |
---|
18081 477187 |
user output |
---|
18081 477187 |
Test 23
Group: 3
Verdict: ACCEPTED
input |
---|
200000 151013 68675 119105 58292 3335... |
correct output |
---|
86328 318722426 |
user output |
---|
86328 318722426 |
Test 24
Group: 3
Verdict: ACCEPTED
input |
---|
200000 11562 33356 106752 170825 2723... |
correct output |
---|
99873 663048119 |
user output |
---|
99873 663048119 |