提出 #66336256
ソースコード 拡げる
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define all(a) a.begin(), a.end()
#define NUM1 998'244'353ll
#define NUM2 1'000'000'007ll
#define MOD NUM1
#define fi first
#define se second
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define sq(a_) ((a_) * (a_))
const ll INF = LLONG_MAX/7;
const ll MAX = 2'50'100ll;
template<typename T>
class segtree{
public:
T id = -INF;
ll n;
vector<T> seg;
T merge(T a, T b){
return max(a, b);
}
segtree(vector<T>& a)
{
this->n = a.size();
seg.resize(4*n);
build(a, 0, 0, n - 1);
}
void build(vector<T>& a, ll v, ll l, ll r)
{
if(l == r){
seg[v] = a[l];
return;
}
ll m = (l + r)/2;
build(a, 2*v + 1, l, m);
build(a, 2*v + 2, m + 1, r);
seg[v] = merge(seg[2*v + 1], seg[2*v + 2]);
}
void update(ll tl, ll tr, ll v, ll pos, T val)
{
if(tl == tr){
seg[v] = val;
return;
}
ll tm = (tl + tr)/2;
if(pos <= tm) update(tl, tm, 2*v + 1, pos, val);
else update(tm + 1, tr, 2*v + 2, pos, val);
seg[v] = merge(seg[2*v + 1], seg[2*v + 2]);
}
T query(ll tl, ll tr, ll v, ll l, ll r)
{
if(l > r) return id;
if(l == tl and r == tr) return seg[v];
ll tm = (tl + tr)/2;
return merge(query(tl, tm, 2*v + 1, l, min(r, tm)), query(tm + 1, tr, 2*v + 2, max(tm + 1, l), r));
}
void update(ll pos, T val)
{
update(0, n - 1, 0, pos, val);
}
T query(ll l, ll r){
return query(0, n - 1, 0, l, r);
}
};
void solve()
{
ll n, d, r;
cin >> n >> d >> r;
vector<ll> a(n);
for(auto& x: a){
cin >> x;
--x;
}
vector<ll> pos(n);
for(ll i = 0; i < n; i++) pos[a[i]] = i;
vector<ll> actvals(n, 0);
vector<ll> mvals(n, -INF);
segtree<ll> seg(mvals);
for(ll i = n - 1; i >= 0; i--){
if(i + d < n){
mvals[pos[i + d]] = actvals[pos[i + d]];
seg.update(pos[i + d], mvals[pos[i + d]]);
}
ll lef = max(0ll, pos[i] - r), rig = min(n - 1, pos[i] + r);
ll v = seg.query(lef, rig);
if(v == -INF){
actvals[pos[i]] = 0;
}
else{
actvals[pos[i]] = 1 + v;
}
}
// for(auto& x: actvals) cerr << x << ' ';
// cerr << '\n';
cout << *max_element(all(actvals)) << '\n';
}
signed main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
// fill(prods, prods + 600, mi(1));
// fact[0] = 1;
// for(ll i = 1; i < MAX; i++) fact[i] = i * fact[i - 1];
// ifact[MAX - 1] = inv(fact[MAX - 1]);
// for(ll i = MAX - 2; i >= 0; i--) ifact[i] = (i + 1) * ifact[i + 1];
ll t = 1;
// cin >> t;
while(t--)
solve();
return 0;
}
提出情報
| 提出日時 |
|
| 問題 |
F - Athletic |
| ユーザ |
udow |
| 言語 |
C++ 20 (gcc 12.2) |
| 得点 |
500 |
| コード長 |
3073 Byte |
| 結果 |
AC |
| 実行時間 |
241 ms |
| メモリ |
34700 KiB |
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
500 / 500 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
00_sample_00.txt, 00_sample_01.txt |
| All |
00_sample_00.txt, 00_sample_01.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt, 01_test_28.txt, 01_test_29.txt, 01_test_30.txt, 01_test_31.txt, 01_test_32.txt, 01_test_33.txt, 01_test_34.txt, 01_test_35.txt, 01_test_36.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| 00_sample_00.txt |
AC |
1 ms |
3516 KiB |
| 00_sample_01.txt |
AC |
1 ms |
3580 KiB |
| 01_test_00.txt |
AC |
1 ms |
3576 KiB |
| 01_test_01.txt |
AC |
1 ms |
3628 KiB |
| 01_test_02.txt |
AC |
1 ms |
3592 KiB |
| 01_test_03.txt |
AC |
1 ms |
3484 KiB |
| 01_test_04.txt |
AC |
1 ms |
3620 KiB |
| 01_test_05.txt |
AC |
1 ms |
3768 KiB |
| 01_test_06.txt |
AC |
94 ms |
19724 KiB |
| 01_test_07.txt |
AC |
241 ms |
34004 KiB |
| 01_test_08.txt |
AC |
42 ms |
11496 KiB |
| 01_test_09.txt |
AC |
37 ms |
9268 KiB |
| 01_test_10.txt |
AC |
35 ms |
12568 KiB |
| 01_test_11.txt |
AC |
173 ms |
30576 KiB |
| 01_test_12.txt |
AC |
36 ms |
14296 KiB |
| 01_test_13.txt |
AC |
3 ms |
3816 KiB |
| 01_test_14.txt |
AC |
28 ms |
10924 KiB |
| 01_test_15.txt |
AC |
29 ms |
8112 KiB |
| 01_test_16.txt |
AC |
110 ms |
22996 KiB |
| 01_test_17.txt |
AC |
153 ms |
27920 KiB |
| 01_test_18.txt |
AC |
191 ms |
34604 KiB |
| 01_test_19.txt |
AC |
240 ms |
34516 KiB |
| 01_test_20.txt |
AC |
123 ms |
34476 KiB |
| 01_test_21.txt |
AC |
228 ms |
34504 KiB |
| 01_test_22.txt |
AC |
134 ms |
34536 KiB |
| 01_test_23.txt |
AC |
232 ms |
34508 KiB |
| 01_test_24.txt |
AC |
101 ms |
34464 KiB |
| 01_test_25.txt |
AC |
41 ms |
34528 KiB |
| 01_test_26.txt |
AC |
41 ms |
34700 KiB |
| 01_test_27.txt |
AC |
121 ms |
34536 KiB |
| 01_test_28.txt |
AC |
122 ms |
34608 KiB |
| 01_test_29.txt |
AC |
71 ms |
34532 KiB |
| 01_test_30.txt |
AC |
196 ms |
34544 KiB |
| 01_test_31.txt |
AC |
171 ms |
34476 KiB |
| 01_test_32.txt |
AC |
194 ms |
34496 KiB |
| 01_test_33.txt |
AC |
196 ms |
34604 KiB |
| 01_test_34.txt |
AC |
194 ms |
34628 KiB |
| 01_test_35.txt |
AC |
192 ms |
34600 KiB |
| 01_test_36.txt |
AC |
1 ms |
3600 KiB |