voidsolve() { int n; cin >> n; vi nums(n); int mx = -1; int tpmx = 0; rep(i, 0, n - 1) { cin >> nums[i]; } auto ddz = [&]() -> vi { vi dl(n + 1); stack<int> stk; for (int i = 0; i < n; i++) { while (!stk.empty() && nums[stk.top()] < nums[i]) { stk.pop(); } if (stk.empty()) { dl[i] = 0; } else { dl[i] = stk.size(); } stk.push(i); } return dl; }; auto ddz2 = [&]() -> vi { vi dl(n + 1); stack<int> stk; for (int i = n - 1; i >= 0; i--) { while (!stk.empty() && nums[stk.top()] < nums[i]) { stk.pop(); } if (stk.empty()) { dl[i] = 0; } else { dl[i] = stk.size(); } stk.push(i); } return dl; }; vi left = ddz(), right = ddz2(); int ans = INF; for (int i = 0; i < n; i++) { auto lf = i - left[i]; auto rt = n - 1 - i - right[i]; dbg(left[i],right[i]); ans = min(ans, lf + rt); } cout << ans << '\n'; }
vi sl(n + 2); vi wl(n + 2); vi sum(n + 2); stack<int> stl; for (int i = 1; i <= n; i++) { while (!stl.empty() && nums[stl.top()] <= nums[i]) { stl.pop(); } int now = 0; if (stl.empty()) { now = 0; } else { now = stl.top(); } sl[i] = sl[now] + (i - now) * nums[i]; wl[i] = i * h - sl[i]; stl.emplace(i); } vi sr(n + 2); vi wr(n + 2); stack<int> str; for (int i = n; i >= 1; i--) { while (!str.empty() && nums[str.top()] <= nums[i]) { str.pop(); } int now = 0; if (str.empty()) { now = n + 1; } else { now = str.top(); } sr[i] = sr[now] + (now - i) * nums[i]; wr[i] = (n - i + 1) * h - sr[i]; str.emplace(i); }
pii mx_ans = {0, 0}; for (int i = 1; i <= n; i++) { sum[i] = wl[i] + wr[i] - (h - nums[i]); if (mx_ans.first < sum[i]) { mx_ans = {sum[i], i}; } }
voidsolve() { int n, h; cin >> n >> h; vi nums(n + 2); rep(i, 1, n) { int d; cin >> d; nums[i] = d; } vi sl(n + 2); vi wl(n + 2); vi sum(n + 2); stack<int> stl; for (int i = 1; i <= n; i++) { while (!stl.empty() && nums[stl.top()] <= nums[i]) { stl.pop(); } int now = 0; if (stl.empty()) { now = 0; } else { now = stl.top(); } sl[i] = sl[now] + (i - now) * nums[i]; wl[i] = i * h - sl[i]; stl.emplace(i); } vi sr(n + 2); vi wr(n + 2); stack<int> str; for (int i = n; i >= 1; i--) { while (!str.empty() && nums[str.top()] <= nums[i]) { str.pop(); } int now = 0; if (str.empty()) { now = n + 1; } else { now = str.top(); } sr[i] = sr[now] + (now - i) * nums[i]; wr[i] = (n - i + 1) * h - sr[i]; str.emplace(i); }
pii mx_ans = {0, 0}; for (int i = 1; i <= n; i++) { sum[i] = wl[i] + wr[i] - (h - nums[i]); if (mx_ans.first < sum[i]) { mx_ans = {sum[i], i}; } } int ans2 = mx_ans.first; int idx = mx_ans.second; int curMax = nums[idx]; int curtp = idx; // cerr<<idx; for (int j = idx; j >= 1; j--) { if (curMax < nums[j]) { curtp = j; curMax = nums[j]; }
for (int i = 0; i <= n; i++) { cin >> nums[i]; } vi dp(n + 1, -INF); deque<int> dq; dp[0] = 0; ll ans = -INF;
for (int i = l; i <= n; i++) { if (i - r) { while (!dq.empty() && i - r > dq.front()) { dq.pop_front(); } } if (dp[i - l] > -INF) { while (!dq.empty() && dp[dq.back()] < dp[i - l]) { dq.pop_back(); } dq.push_back(i - l); } if(!dq.empty()) dp[i] = max(dp[i], dp[dq.front()] + nums[i]); if (i + r > n) { ans = max(ans, dp[i]); } } cout << ans << '\n'; }
int n; cin >> n; vi a(n); vi b(n); for (int i = 0; i < n; i++) { cin >> a[i]; } for (int i = 0; i < n; i++) { cin >> b[i]; } sort(all(a)); sort(all(b)); priority_queue<pair<int, pii>, vector<pair<int, pii>>, greater<>> pq; int x = 0, y = 0; // pq.emplace(a[x] + b[y], make_pair(x, y));
voidinsert(string s) { int ptr1 = 0; int bra = 0; for (int i = 0; i < s.size(); i++) { if (!tre[ptr1][getnum(s[i])]) { idx++; tre[ptr1][getnum(s[i])] = idx; } ptr1 = tre[ptr1][getnum(s[i])]; cnt[ptr1]++; } }
intquery(string s) { int ans=0; int ptr2 = 0; for (int i = 0; i < s.size(); i++) { if (tre[ptr2][getnum(s[i])^1]) { ptr2=tre[ptr2][getnum(s[i]^1)]; ans+= (1ll << (s.size() -1 - i)); // cerr<<(1 << (s.size() - i)); } else { ptr2=tre[ptr2][getnum(s[i])]; } } return ans; } } myTrie;
voidsolve() { int n; cin>>n;
auto tos=[&](int d)->string { int q=d; string s=""; while(d>0) { s+=(d%2)+'0'; d/=2; } int yy=(31-s.size()); while(yy--) { s+='0'; } std::reverse(s.begin(), s.end()); return s; }; vi nums(n); for(int i=0;i<n;i++) { int d; cin>>d; //cerr<<tos(d)<<'\n'; myTrie.insert(tos(d)); nums[i]=d; } vi jb(n); for(int i=0;i<n;i++) { jb[i]=myTrie.query(tos(nums[i])); // cerr<<jb[i]<<' '; cerr<<'\n'; } cout<<*max_element(all(jb));