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