제출 #1271911

#제출 시각아이디문제언어결과실행 시간메모리
1271911marshziinGlobal Warming (CEOI18_glo)C++20
0 / 100
374 ms25236 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pii pair<int,int> const int maxn = 2e5 + 10; int A[maxn]; int L[maxn], R[maxn]; //seg int tree[4 * maxn]; void reset() { for (int i = 0; i < 4*maxn; i++) tree[i] = 0; } void update(int node, int l, int r, int pos, int val) { if(l == r) { tree[node] = val; return; } int mid = (l + r) / 2; if(pos <= mid) update(2 * node, l, mid, pos, val); else update(2 * node + 1, mid + 1, r, pos, val); tree[node] = tree[2 * node] + tree[2 * node + 1]; return; } int query(int node, int tl, int tr, int l, int r) { if(tl > r || tr < l) return 0; if(tl >= l && tr <= r) return tree[node]; int mid = (tl + tr) / 2; return max(query(2 * node, tl, mid, l, r), query(2 * node + 1, mid + 1, tr, l, r)); } int32_t main() { ios_base::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n >> m; vector<int> ord; for (int i = 1; i <= n; i++) { cin >> A[i]; ord.push_back(A[i]); } map<int,int> comp; sort(ord.begin(), ord.end()); ord.erase(unique(ord.begin(), ord.end()), ord.end()); int id = 1; for (auto x : ord) comp[x] = id++; for (int i = 1; i <= n; i++) { int aux = query(1, 1, n, 1, comp[A[i]] - 1); L[i] = aux + 1; update(1, 1, n, comp[A[i]], L[i]); } reset(); for (int i = n; i >= 1; i--) { int aux = query(1, 1, n, comp[A[i]] + 1, n); R[i] = aux + 1; update(1, 1, n, comp[A[i]], R[i]); } int res = 0; for (int i = 1; i <= n; i++) res = max(res, L[i] + R[i] - 1); cout << res << '\n'; return 0; }
#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...