Submission #1250708

#TimeUsernameProblemLanguageResultExecution timeMemory
1250708TINFinancial Report (JOI21_financial)C++20
100 / 100
244 ms8668 KiB
#include <bits/stdc++.h> using namespace std; #define FNAME "test" const int N = 3e5 + 5; int n, D; int a[N]; int pos[N]; int rnk[N]; int ST[4 * N]; void Task() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cout << fixed << setprecision(9); if (fopen(FNAME".inp","r")) { freopen(FNAME".inp","r",stdin); freopen(FNAME".out","w",stdout); } } void update(int id, int l, int r, int pos, int val) { if (pos < l || r < pos) return; if (l == r) { ST[id] = val; return; } int m = (l + r) / 2; if (pos <= m) update(id * 2, l, m, pos, val); else update(id * 2 + 1, m + 1, r, pos, val); ST[id] = max(ST[id * 2], ST[id * 2 + 1]); } int query(int id, int l, int r, int u, int v) { if (u > v) return 0; if (v < l || r < u) return 0; if (u <= l && r <= v) return ST[id]; int m = (l + r) / 2; int ret = INT_MIN; if (u <= m) ret = max(ret, query(id * 2, l, m, u, v)); if (v > m) ret = max(ret, query(id * 2 + 1, m + 1, r, u, v)); return ret; } int find(int id, int l, int r, int u, int v) { if (u > v) return 0; if (v < l || r < u || !ST[id]) return 0; if (l == r) return l; int m = (l + r) / 2; return find(id * 2, l, m, u, v) ? : find(id * 2 + 1, m + 1, r, u, v); } int find(int x) { if (pos[x] == x) { int res = find(1, 1, n, x - D, x - 1); if (res) pos[x] = find(res); return pos[x]; } return pos[x] = find(pos[x]); } void Solve() { //Your Code cin >> n >> D; for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 1; i <= n; i++) pos[i] = i; for (int i = 1; i <= n; i++) rnk[i] = n + 1 - i; stable_sort(rnk + 1, rnk + n + 1, [](int i, int j) { return a[i] < a[j]; }); memset(ST, 0, sizeof(ST)); for (int i = 1; i <= n; i++) update(1, 1, n, rnk[i], query(1, 1, n, find(rnk[i]) - D, rnk[i] - 1) + 1); cout << query(1, 1, n, 1, n); } int main() { Task(); Solve(); cerr << "\nTime run: " << 1000*clock()/CLOCKS_PER_SEC << "ms"; return 37^37; }

Compilation message (stderr)

Main.cpp: In function 'void Task()':
Main.cpp:20:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   20 |                 freopen(FNAME".inp","r",stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:21:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   21 |                 freopen(FNAME".out","w",stdout);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#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...