当前位置:网站首页>迪拜的超市---线段树双重懒标记+二分
迪拜的超市---线段树双重懒标记+二分
2022-07-31 09:34:00 【WAWA源】
题目链接
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 200010;
#define int long long
struct node
{
int l, r;
int sum, add, clear;
}tr[N*4];
void pushup(int u)
{
tr[u].sum = tr[u<<1].sum + tr[u<<1|1].sum;
}
void eval(node &t,int add,int clear)
{
if(clear)
{
t.add = 0;
t.sum = 0;
t.clear = clear;
}
if(add)
{
t.add += add;
t.sum += (t.r - t.l + 1) * add;
}
}
void pushdown(int u)
{
eval(tr[u<<1], tr[u].add, tr[u].clear);
eval(tr[u<<1|1], tr[u].add, tr[u].clear);
tr[u].clear = 0;
tr[u].add = 0;
}
void build(int u,int l,int r)
{
if(l == r) tr[u] = {
l, r, 0, 0, 0};
else
{
tr[u] = {
l,r};
int mid = l + r >> 1;
build(u<<1, l, mid);
build(u<<1|1, mid+1, r);
pushup(u);
}
}
void modify(int u,int l,int r,int v,int clear)
{
if(tr[u].l >= l && tr[u].r <= r)
{
eval(tr[u], v, clear);
return ;
}
pushdown(u);
int mid = tr[u].l + tr[u].r >> 1;
if(l <= mid) modify(u<<1, l, r, v, clear);
if(r > mid) modify(u<<1|1, l, r, v, clear);
pushup(u);
}
int query(int u,int l,int r)
{
if(tr[u].l >= l && tr[u].r <= r)return tr[u].sum;
int res = 0;
int mid = tr[u].l + tr[u].r >> 1;
pushdown(u);
if(l <= mid) res += query(u<<1, l, r);
if(r > mid) res += query(u<<1|1, l, r);
return res;
}
void solve()
{
int n,m;
cin>>n>>m;
build(1,1,n);
int op,l,r,v;
while(m--)
{
cin>>op;
if(op==1)
{
cin>>l>>r>>v;
modify(1, l, r, v, 0);
}
else
{
cin >> v;
int l = 1, r = n;
while(l < r)
{
int mid = l + r >> 1;
if(query(1,1,mid) >= v) r = mid;
else l = mid + 1;
}
if(query(1,1,r)<v)cout<<"Trote_w is sb"<<'\n';
else
{
cout << r << '\n';
modify(1, r, r, -v+query(1,1,r-1), 0);
modify(1, 1, r-1, 0, 1);
}
}
}
}
signed main()
{
int T;cin>>T;
while(T--)solve();
}
边栏推荐
猜你喜欢
Flink1.15 source code reading - PER_JOB vs APPLICATION execution process
js实现2020年元旦倒计时公告牌
Browser usage ratio js radar chart
Pytorch学习记录(七):自定义模型 & Auto-Encoders
02 Truffle TutorialToken 示例
作为面试官,关于线程池的问题我一般这样套路...
如何将虚拟机上的文件复制到主机上
优信年营收16亿:亏损3亿 已与蔚来资本及58集团签署股权协议
基于学生成绩管理系统(附源代码及数据库)
[NLP] Interpretation of Transformer Theory
随机推荐
状态机动态规划之股票问题总结
UE4插件软链接(关联)
Use turtle to draw buttons
来n遍剑指--07. 重建二叉树
第六章
ARC在编译和运行做了什么?
浏览器使用占比js雷达图
Canvas particles change various shapes js special effects
各位大佬,sqlserver 支持表名正则匹配吗
qt在不同的线程中传递自定义结构体参数
安装sambe
js雷达图统计图表插件
Kotlin 优点
MySQL 高级(进阶) SQL 语句 (一)
Chapter Six
Kotlin入门介绍篇
感情危机,朋友的网恋女友要和他闹分手,问我怎么办
MySQL 的几种碎片整理方案总结(解决delete大量数据后空间不释放的问题)
如何在 TiDB Cloud 上使用 Databricks 进行数据分析 | TiDB Cloud 使用指南
Gradle series - Groovy overview, basic use (based on Groovy document 4.0.4) day2-1