UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#159055#46. deleteNanfeng1997100354ms16640kbC++1.5kb2022-09-05 11:48:422022-09-05 11:48:44

answer

#include <bits/stdc++.h>
using namespace std;

#define rep(i, a, b) for (int i(a); i <= b; ++ i ) 
#define dec(i, a, b) for (int i(b); i >= a; -- i ) 

#ifdef LOCAL
  #include <debugger>
  clock_t start = clock();
#else
  #define debug(...) 42
#endif

template <typename T> void chkmax(T &x, T y) { x = max(x, y); }
template <typename T> void chkmin(T &x, T y) { x = min(x, y); }

const int N = 1E6 + 10;

int n, k, m;
int a[N], dp[N];
pair<int, int> p[N];
template <typename T>
class fenwick {
 public:
  vector<T> fenw;
  int n;
 
  fenwick(int _n) : n(_n) {
    fenw.resize(n);
  }
 
  void modify(int x, T v) {
    while (x < n) {
      chkmax(fenw[x], v);
      // fenw[x] += v;
      x |= (x + 1);
    }
  }
 
  T get(int x) {
    T v = 0;
    while (x >= 0) {
      // v += fenw[x];
      chkmax(v, fenw[x]);
      x = (x & (x + 1)) - 1;
    }
    return v;
  }

};

void solve() {
  cin >> n >> k;
  rep (i, 1, n) {
    cin >> a[i];
    if (a[i] <= i && i - a[i] <= k && a[i] <= n - k) p[m ++ ] = make_pair(i - a[i], a[i]); 
  }
  sort(p, p + m);
  fenwick<int> fen(n + 10);
  for (int i = 0; i < m; i ++ ) {
    int now = fen.get(p[i].second - 1);
    fen.modify(p[i].second, now + 1);
  }
  cout << fen.get(n);

}
int main() {
  // cin.tie(nullptr)->sync_with_stdio(false);
  ios::sync_with_stdio(0);
  cin.tie(0);
  solve();
#ifdef LOCAL
  clock_t ends = clock();
  // cout << "\n\nRunning Time : " << (double) (ends - start) / CLOCKS_PER_SEC * 1000 << "ms" << endl;
#endif
  return 0;
}

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 4ms
memory: 9072kb

input:

20 8
11 9 10 2 4 8 7 4 9 8 12 1 3 12 7 9 9 16 3 15

output:

4

result:

ok single line: '4'

Test #2:

score: 10
Accepted
time: 0ms
memory: 9072kb

input:

20 10
1 12 11 1 2 7 10 2 13 4 11 14 8 15 4 6 1 3 5 12

output:

4

result:

ok single line: '4'

Test #3:

score: 10
Accepted
time: 0ms
memory: 9076kb

input:

500 150
7 2 11 5 1 13 10 10 14 20 20 2 5 17 14 4 5 5 3 2 2 7 10 3 18 2 7 3 5 15 2 8 5 14 3 1 1 4 19 ...

output:

27

result:

ok single line: '27'

Test #4:

score: 10
Accepted
time: 0ms
memory: 9080kb

input:

500 233
8 16 14 3 7 1 14 15 11 8 4 11 13 6 5 18 2 11 10 5 7 3 14 2 7 16 6 5 14 1 13 6 9 7 9 5 5 6 2 ...

output:

26

result:

ok single line: '26'

Test #5:

score: 10
Accepted
time: 3ms
memory: 9112kb

input:

5000 1666
15 23 11 4 10 16 24 9 10 10 9 14 7 3 1 22 4 8 7 18 3 24 19 6 2 16 2 5 7 10 6 12 1 6 18 9 6...

output:

120

result:

ok single line: '120'

Test #6:

score: 10
Accepted
time: 0ms
memory: 9116kb

input:

5000 2333
2 28 15 6 10 2 10 10 26 7 8 16 3 1 15 17 11 7 8 2 8 2 6 3 4 13 6 20 13 18 3 6 24 1 5 26 18...

output:

120

result:

ok single line: '120'

Test #7:

score: 10
Accepted
time: 16ms
memory: 9776kb

input:

100000 23333
158 127 191 174 144 43 80 135 48 54 91 22 135 145 32 109 180 16 51 47 86 69 26 121 161 ...

output:

596

result:

ok single line: '596'

Test #8:

score: 10
Accepted
time: 11ms
memory: 9772kb

input:

100000 55555
81 122 1 146 76 142 36 207 127 17 5 102 123 42 69 15 42 137 94 107 101 49 179 44 48 78 ...

output:

444

result:

ok single line: '444'

Test #9:

score: 10
Accepted
time: 202ms
memory: 16640kb

input:

1000000 233333
536 132 387 278 660 779 239 1629 535 1641 1374 532 53 840 432 180 1457 232 494 580 61...

output:

1819

result:

ok single line: '1819'

Test #10:

score: 10
Accepted
time: 118ms
memory: 16640kb

input:

1000000 666666
1053 405 264 292 1304 414 58 948 985 1112 865 1225 982 595 927 701 623 666 43 1019 43...

output:

1187

result:

ok single line: '1187'

Extra Test:

score: 0
Extra Test Passed