제출 #824994

#제출 시각아이디문제언어결과실행 시간메모리
824994PixelCat송신탑 (IOI22_towers)C++17
11 / 100
4059 ms1524 KiB
#include "towers.h" #ifdef NYAOWO #include "stub.cpp" #endif #include <bits/stdc++.h> #define For(i, a, b) for(int i = a; i <= b; i++) #define Forr(i, a, b) for(int i = a; i >= b; i--) #define F first #define S second #define all(x) x.begin(), x.end() #define sz(x) ((int)x.size()) #define eb emplace_back // #define int LL using namespace std; using i32 = int32_t; using LL = long long; using pii = pair<int, int>; inline void chmax(int &x, int val) { x = max(x, val); } const int MAXN = 100'000; // #define L(id) ((id) * 2 + 1) // #define R(id) ((id) * 2 + 2) // struct SegTree { // int mx[MAXN * 4 + 10]; // void build() { // memset(mx, 0, sizeof(mx)); // } // void upd(int id, int l, int r, int pos, int val) { // if(l == r) { // mx[id] = // } // } // } seg; int n; int h[MAXN + 10]; int dp1[MAXN + 10]; int dp2[MAXN + 10]; void init(int N, std::vector<int> H) { n = N; For(i, 0, n - 1) h[i] = H[i]; } int max_towers(int L, int R, int D) { int ans = 0; For(i, L, R) { dp1[i] = 1; dp2[i] = 0; For(j, L, i - 1) { if(h[i] - D >= h[j]) { chmax(dp2[i], dp1[j]); } else if(h[i] + D <= h[j]) { chmax(dp1[i], dp2[j] + 1); } } chmax(ans, dp1[i]); } return ans; } /* 7 3 10 20 60 40 50 30 70 1 5 10 2 2 100 0 6 17 3 1 2 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...