mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-08-21 18:52:07 +00:00
update
This commit is contained in:
parent
4b54a56f4f
commit
f9b5a94c12
53
src/8/16/trionic-array-ii.cpp
Normal file
53
src/8/16/trionic-array-ii.cpp
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#include <bits/stdc++.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
public:
|
||||||
|
long long maxSumTrionic(vector<int>& nums) {
|
||||||
|
vector<int> dp(nums.size());
|
||||||
|
cout<<dp[0]<<',';
|
||||||
|
int ans = INT_MIN;
|
||||||
|
for(int i=1;i<nums.size();i++){
|
||||||
|
if(nums[i]<=nums[i-1]){
|
||||||
|
dp[i]=dp[i-1];
|
||||||
|
}else{
|
||||||
|
dp[i]=i;
|
||||||
|
}
|
||||||
|
cout<<dp[i]<<',';
|
||||||
|
}
|
||||||
|
cout<<'\n';
|
||||||
|
for(int i=1;i<nums.size()-1;i++){
|
||||||
|
cout<<"i:"<<i<<'\n';
|
||||||
|
if(i+1<nums.size() && dp[i+1]==dp[i])continue;
|
||||||
|
if(dp[i]==i)continue;
|
||||||
|
if(dp[i]==0 || dp[i+1]==dp[i])continue;
|
||||||
|
int l = dp[i],r=i+1;
|
||||||
|
int lsum = nums[dp[i]-1],rsum=nums[i+1],rbegin=nums[i+1];
|
||||||
|
while(l-1>0 && (l==1||dp[l-1]!=dp[l-2]) && nums[l]>0){
|
||||||
|
l--;
|
||||||
|
lsum+=nums[l];
|
||||||
|
cout<<"l:"<<l<<'\n';
|
||||||
|
}
|
||||||
|
while(r<nums.size()-1 && (r==nums.size()-1||dp[r]!=dp[r+1])){
|
||||||
|
r++;
|
||||||
|
rsum+=nums[r];
|
||||||
|
cout<<"r:"<<r<<'\n';
|
||||||
|
}
|
||||||
|
int mid = 0;
|
||||||
|
for(int j=dp[i];j<=i;j++){
|
||||||
|
mid+=nums[j];
|
||||||
|
}
|
||||||
|
ans=max(ans,mid+lsum+max(rsum,rbegin));
|
||||||
|
cout<<mid+lsum+max(rsum,rbegin)<<'\n';
|
||||||
|
}
|
||||||
|
return ans;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
Solution s;
|
||||||
|
vector<int> v={1,4,2,7};
|
||||||
|
cout<<s.maxSumTrionic(v)<<'\n';
|
||||||
|
}
|
72
src/8/18/segtree_add.cpp
Normal file
72
src/8/18/segtree_add.cpp
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
#include <algorithm>
|
||||||
|
#include <cstdint>
|
||||||
|
#include <iostream>
|
||||||
|
#include <limits>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
using ll = int64_t;
|
||||||
|
|
||||||
|
std::vector<ll> t;
|
||||||
|
std::vector<ll> nums;
|
||||||
|
|
||||||
|
ll create(ll l, ll r, ll idx) {
|
||||||
|
if (l == r) {
|
||||||
|
t[idx] = nums[l];
|
||||||
|
return t[idx];
|
||||||
|
}
|
||||||
|
ll mid = (l + r) / 2;
|
||||||
|
t[idx] = std::min(create(l, mid, 2 * idx + 1), create(mid + 1, r, 2 * idx + 2));
|
||||||
|
return t[idx];
|
||||||
|
}
|
||||||
|
|
||||||
|
void update(ll l, ll r, ll idx, ll pos, ll val) {
|
||||||
|
if (l == r) {
|
||||||
|
t[idx] = val;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ll mid = (l + r) / 2;
|
||||||
|
if (pos <= mid) {
|
||||||
|
update(l, mid, 2 * idx + 1, pos, val);
|
||||||
|
} else {
|
||||||
|
update(mid + 1, r, 2 * idx + 2, pos, val);
|
||||||
|
}
|
||||||
|
t[idx] = std::min(t[2 * idx + 1], t[2 * idx + 2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
ll query(ll cur,ll ql,ll qr,ll l,ll r){
|
||||||
|
if(qr<l || r<ql)return std::numeric_limits<ll>::max();
|
||||||
|
if(ql<=l && r<=qr)return t[cur];
|
||||||
|
ll mid = (l+r)/2;
|
||||||
|
return std::min(
|
||||||
|
query(cur*2+1, ql, qr, l, mid),
|
||||||
|
query(cur*2+2, ql, qr, mid+1, r)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
// 区间min 单点修改
|
||||||
|
ll n;
|
||||||
|
std::cin>>n;
|
||||||
|
t.resize(4*n);
|
||||||
|
nums.resize(n);
|
||||||
|
for(ll i=0; i<n; i++){
|
||||||
|
std::cin>>nums[i];
|
||||||
|
}
|
||||||
|
create(0, n - 1, 0);
|
||||||
|
ll q;
|
||||||
|
std::cin>>q;
|
||||||
|
while(q--){
|
||||||
|
ll idx, val;
|
||||||
|
std::cin>>idx>>val;
|
||||||
|
idx--;
|
||||||
|
update(0, n - 1, 0, idx, val);
|
||||||
|
std::cout << t[0] << "\n";
|
||||||
|
}
|
||||||
|
std::cin>>q;
|
||||||
|
while(q--){
|
||||||
|
ll l,r;
|
||||||
|
std::cin>>l>>r;
|
||||||
|
l++,r++;
|
||||||
|
std::cout<<query(0, l, r, 0, n-1)<<'\n';
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user