[ABC379D] Home Garden 题解
1.[ABC347C] Ideal Holidays题解2.《扶苏的问题》题解3.[ABC366C] Balls and Bag Query 题解4.[ABC366D] Cuboid Sum Query 题解5.P7706 文文的摄影布置 题解6.[ABC370C] Word Ladder 题解7.P11020 「LAOI-6」Radiation 题解8.P11019 「LAOI-6」[太阳]] 请使用最新版手机 QQ 体验新功能 题解9.[ABC371D] 1D Country 题解10.[ABC371D] 1D Country 线段树解法11.P1955 程序自动分析 题解12.[ABC376E] Max × Sum 题解
13.[ABC379D] Home Garden 题解
14.P11276 第一首歌 题解15.[ABC380C] Move Segment 题解[ABC379D] Home Garden 题解
题目大意:
实现一个数据结构,使其支持以下三个操作:
1
向这个数据结构中插入一个数值为
2 T
将这个数据结构中的所有元素加
3 H
将这个数据结构中大于等与
思路分析:
由于不存在使此结构中的元素变小的手段,所以集合中的元素按加入时间来排序,其的值是单调不减的。因为存在单调性,则
那么如何解决
对于操作
删除操作,由于区间具有单调性,在删除时一定是从左往右删除,则实际不用真的删除,只需维护已经删除的点数量
代码详解:
#include <bits/stdc++.h>
#define seq(q, w, e) for (int q = w; q <= e; q++)
#define int long long
using namespace std;
const int maxn = 2e5+10,inf=0x7fffffff;
int t[maxn];
int nt,sum,nl,h;
int q,op,tot;
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>q;
while(q--){
cin>>op;
if(op==1){
tot++;
t[tot]=nt;
}
if(op==2){
cin>>sum;
nt+=sum;
}
if(op==3){
cin>>h;
int l=nl,r=tot+1,mid;
while(l+1<r){
mid=(l+r)>>1;
if((nt-t[mid])>=h){
l=mid;
}
else{
r=mid;
}
}
cout<<l-nl<<"\n";
nl=l;
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】