CF915E Physical Education Lessons
题意
Alex高中毕业了,他现在是大学新生。虽然他学习编程,但他还是要上体育课,这对他来说完全是一个意外。快要期末了,但是不幸的Alex的体育学分还是零蛋!
Alex可不希望被开除,他想知道到期末还有多少天的工作日,这样他就能在这些日子里修体育学分。但是在这里计算工作日可不是件容易的事情:
从现在到学期结束还有
-
如果
,那么从 到 (包含端点)的所有日子都变成非工作日。 -
如果
,那么从 到 (包含端点)的所有日子都变成工作日。
帮助Alex统计每个指令下发后,剩余的工作日天数。
Translated by 小粉兔
思路
正解是珂朵莉树,然而为什么不选择会蹦会跳的小动态开点线段树呢?
直接整一个动态开点线段树维护区间赋值就完事了
……吗?
本题中动态开点的空间复杂度大约为 long long
是等长的。压都压不动。
所以只能屈辱地选择数组式动态开点,搭配各类奇技淫巧卡常。
代码
寄在 #18 MLE 的指针代码。一路走好。
#define mid ((l+r)>>1)
struct node{
node *ls,*rs;
ll val;
bool g;
node(){
ls=0,rs=0;
val=0,g=0;
}
void upd(){
val=ls->val+rs->val;
}
void push_down(ll l,ll r){
ls->g=1;
ls->val=(val?1:0)*(mid-l+1);
rs->g=1;
rs->val=(val?1:0)*(r-mid);
g=0;
}
};
node *rt;
void modify(node *x,ll l,ll r,ll ls,ll rs,ll ty){
if(ls<=l&&r<=rs){
x->val=ty*(r-l+1);
x->g=1;
return ;
}
if(!x->ls)x->ls=new node;
if(!x->rs)x->rs=new node;
if(x->g)x->push_down(l,r);
if(ls<=mid)modify(x->ls,l,mid,ls,rs,ty);
if(rs>mid)modify(x->rs,mid+1,r,ls,rs,ty);
x->upd();
}
ll n,m;
signed main(){
scanf("%d%d",&n,&m);
rt=new node;
ll l,r,ty;
while(m--){
scanf("%d%d%d",&l,&r,&ty);
ty&=1;
modify(rt,1,n,l,r,ty);
printf("%d\n",n-rt->val);
}
return 0;
}
AC 代码:
const ll maxn=1.5e7+10;
ll t[maxn],ls[maxn],rs[maxn];
bool g[maxn];
ll tot=1;
ll n,m;
#define mid ((l+r)>>1)
void upd(ll x){
t[x]=t[ls[x]]+t[rs[x]];
}
void push_down(ll x,ll l,ll r){
g[ls[x]]=g[rs[x]]=1;
t[ls[x]]=t[x]?(mid-l+1):0;
t[rs[x]]=t[x]?(r-mid):0;
g[x]=0;
}
void modify(ll x,ll l,ll r,ll L,ll R,ll ty){
if(L<=l&&r<=R){
t[x]=ty?(r-l+1):0;
g[x]=1;
return ;
}
if(!ls[x])ls[x]=++tot;
if(!rs[x])rs[x]=++tot;
if(g[x])push_down(x,l,r);
if(L<=mid)modify(ls[x],l,mid,L,R,ty);
if(R>mid)modify(rs[x],mid+1,r,L,R,ty);
upd(x);
}
signed main(){
scanf("%d%d",&n,&m);
ll l,r,ty;
while(m--){
scanf("%d%d%d",&l,&r,&ty);
ty&=1;
modify(1,1,n,l,r,ty);
printf("%d\n",n-t[1]);
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】