一、题目描述:
给你一个长度为
每次操作后,输出序列前
数据范围:
二、解题思路:
用两个
每次将
好奇妙的思路啊!不愧是
三、完整代码:
1 #include<iostream> 2 #include<set> 3 #define N 500010 4 #define ll long long 5 using namespace std; 6 multiset <ll> s1,s2; 7 ll n,k,q,x,y,ans,a[N]; 8 int main() 9 { 10 ios::sync_with_stdio(false); 11 cin.tie(0);cout.tie(0); 12 cin>>n>>k>>q; 13 for(ll i=1;i<=n;i++) 14 if(i<=k) s1.insert(a[i]); 15 else s2.insert(a[i]); 16 for(ll i=1;i<=q;i++) 17 { 18 cin>>x>>y; 19 ll t=y-a[x]; 20 if(k==n) 21 { 22 a[x]=y;ans+=t; 23 cout<<ans<<'\n'; 24 continue; 25 } 26 auto iter1=s1.find(a[x]); 27 auto iter2=s2.find(a[x]); 28 if(iter1!=s1.end()) 29 s1.erase(iter1),s1.insert(y),ans+=t; 30 else s2.erase(iter2),s2.insert(y); 31 a[x]=y;iter1=s1.begin(); 32 iter2=s2.end(); iter2--; 33 x=*iter1,y=*iter2,t=y-x; 34 while(t>0) 35 { 36 ans+=t; 37 s1.erase(iter1),s1.insert(y); 38 s2.erase(iter2),s2.insert(x); 39 iter1=s1.begin(); 40 iter2=s2.end();iter2--; 41 x=*iter1,y=*iter2,t=y-x; 42 } 43 cout<<ans<<'\n'; 44 } 45 return 0; 46 }
四、写题心得:
标签:
Atcoder
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】