暑假集训 加赛1
1.Codeforces Round 955 (Div. 2)2.AtCoder Beginner Contest 3633.AtCoder Regular Contest 182(A B C)4.暑假集训CSP提高模拟15.暑假集训CSP提高模拟26.暑假集训CSP提高模拟77.暑假集训CSP提高模拟5
8.暑假集训 加赛1
9.暑假集训CSP提高模拟410.暑假集训CSP提高模拟1811.暑假集训CSP提高模拟1712.暑假集训CSP提高模拟 1613.暑假集训CSP提高模拟 ∫[0,6] (x^2)/6 dx14.暑假集训CSP提高模拟1115.暑假集训SCP提高模拟1016.暑假集训PVZ提高模拟917.暑假集训CSP提高模拟818.暑集假训SCP提高拟模2119.[CL-FOOL] CLOI 愚人赛的部分官方题解与小杂谈20.トヨタ自動車プログラミングコンテスト2024#7(ABC 362)21.寒假集训测试2 题目转存22.HEOI2024 题目转存23.高一小学期224.张江蔡25.高一高考集训总结赛26.高一下二调题目转存27.CSP提高组模拟128.Atcoder Beginner Contest 36729.[R18][中国語翻訳]HDKのABC370赛試(ABC370)30.[30] CSP 加赛 131.[33](CSP 集训)CSP-S 模拟 432.[34](CSP 集训)CSP-S 联训模拟 133.[35] (CSP 集训) CSP-S 模拟 534.[36](CSP 集训)CSP-S 模拟 635.AtCoder Beginner Contest 37336.[37](CSP 集训)CSP-S 模拟 737.[39] (多校联训) A层冲刺NOIP2024模拟赛0138.[40](CSP 集训)CSP 联训模拟 239.[42] (多校联训) A层冲刺NOIP2024模拟赛0340.[41] (CSP 集训) CSP-S 模拟 941.[44] (多校联训) A层冲刺NOIP2024模拟赛0442.[45] (多校联训) A层冲刺NOIP2024模拟赛0543.[46] (多校联训) A层冲刺NOIP2024模拟赛0644.パナソニックグループ プログラミングコンテスト2024(ABC 375)45.[47] (CSP 集训) CSP-S 模拟 1146.[49 & 50] (多校联训) A层冲刺NOIP2024模拟赛08 | CSP-S 模拟 1247.[51] (多校联训) A层冲刺NOIP2024模拟赛0948.Atcoder Beginner Contest 37649.Codeforces Round 980 (Div. 2)50.[54] (多校联训) A层冲刺NOIP2024模拟赛1251.[57] (多校联训) A层冲刺NOIP2024模拟赛1552.[61] (多校联训) A层冲刺NOIP2024模拟赛1853.[62] (NOIP 集训) NOIP2024加赛 254.[63] (多校联训) A层冲刺NOIP2024模拟赛1955.[68] (炼石计划) NOIP 模拟赛 #2056.[68] (NOIP集训) NOIP2024 加赛 557.[72] (多校联训) A层冲刺NOIP2024模拟赛2558.[73] (NOIP集训) NOIP2024 加赛 759.[75] (NOIP集训) NOIP2024 加赛 8A.修仙(restart)
注意到这个题显然可以开一个优先队列来每次选取最优的解(对结果贡献最大的,显然也是值最大的),但是我们会发现能卡掉这个算法:
4 7
3 4 4 3
显然是应该选两边的.
直接考虑的话太麻烦了,因此我们考虑做一个反悔.
不难发现,对于每一组来说的更优策略只出现在不选它,而选它的左右组合的时候. 因此我们在每次选出一个新的组合的时候,都向优先队列内插入一个值,用来表示 “取消选择当前值,而选择它的左右组合所带来的价值贡献”,即 “左方组合贡献+右方组合贡献-当前贡献”,假如这个贡献比优先队列中任何一个贡献都优,那么我们就采用这个返回方案.
这样做的话我们就不存在不能选的点了(任何一个点在优先队列中都有对应的节点,只不过当合并后,两个点会缩成一个),因此我们可以考虑用双向链表来维护这样的序列.
赛时初始化的值太小了... 应该直接 memset 的.
这个题细节太多了
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int inf=0x3f3f3f3f3f3f3f3f;
int n,x,sum;
int a[200001],gx[200001];
struct node{
int leftid,w;
bool operator <(const node &A)const{
if(w==A.w) return leftid<A.leftid;
return w<A.w; //
}
};
priority_queue<node>q;
int l[200001],r[200001];
bool hadcon[200001];
void connect(int x){ //x and x+1 make_pair
/*
- - - - -
l[l[x]] l[x] x-----r[x] r[r[x]]
*/
r[l[l[x]]]=x;
l[r[r[x]]]=x;
gx[x]=gx[l[x]]+gx[r[x]]-gx[x];
hadcon[l[x]]=hadcon[r[x]]=1;
l[x]=l[l[x]];
r[x]=r[r[x]];
}
void print(priority_queue<node>p){
while(!p.empty()){
node u=p.top();p.pop();
cout<<u.leftid<<" "<<u.w<<endl;
}
cout<<endl;
}
signed main(){
// freopen("restart3.in","r",stdin);
// freopen("out.out","w",stdout);
cin>>n>>x;
for(int i=1;i<=n;++i){
cin>>a[i];sum+=a[i];
if(i!=1){
gx[i-1]=a[i]+a[i-1]-max(a[i]+a[i-1]-x,0ll);
}
}
for(int i=1;i<=n-1;++i){
l[i]=i-1;
r[i]=i+1;
// cout<<" push "<<i<<" "<<gx[i]<<endl;
q.push({i,gx[i]});
}
gx[0]=-inf;gx[n]=-inf;
l[0]=n;r[n]=0;r[0]=1;l[n]=n-1;
for(int k=1;k<=n/2;++k){
// print(q);
while(q.size() and hadcon[q.top().leftid]){
q.pop();
}
if(q.size()){
// cout<<"conn "<<q.top().leftid<<endl;
node u=q.top();q.pop();
sum-=u.w;
connect(u.leftid);
q.push({u.leftid,gx[u.leftid]});
}
cout<<sum<<endl;
}
}
/*
6 10
5 6 3 5 4 5
8 6
3 3 2 5 5 2 3 3
8 6
3 3 4 3 3 4 3 3
*/
B.七负我
考虑两个没有边的点
设团的大小为
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库