Just a Hook hdu1698 [线段树区间更新]
这是一道比较明显的线段树区间更新,但是写起来还是有点麻烦~
直接上模板
【Just a Hook hdu1698 [线段树区间更新]】相关链接:
just a hook
#include
#include
#include
#include using namespace std;
#define N 100005
int s[N<<2];
int a[N<<2];
void pushup(int rt)//向上更新
{
s[rt]=s[rt<<1]+s[rt<<1|1];
}
void down(int rt,int p)//向下更新
{
if(a[rt])
{
a[rt<<1]=a[rt];
a[rt<<1|1]=a[rt];
s[rt<<1]=a[rt]*(p-p/2);
s[rt<<1|1]=a[rt]*(p/2);
a[rt]=0;
}
}
void build(int l,int r,int rt)
{
a[rt]=0;
if(l==r)
s[rt]=1;
else
{
int m=(l+r)/2;
build(l,m,rt<<1);
build(m+1,r,rt<<1|1);
pushup(rt);
}
}
void updata(int left,int right,int l,int r,int rt,int p)
{
if(left<=l&&right>=r)
{
a[rt]=p;
s[rt]=a[rt]*(r-l+1);
return ;
}
else
{
down(rt,r-l+1);
int m=(l+r)/2;
if(left<=m)
updata(left,right,l,m,rt<<1,p);
if(right>m)
updata(left,right,m+1,r,rt<<1|1,p);
pushup(rt);
}
}
int query(int left,int right,int l,int r,int rt)
{
if(left<=l&&right>=r)
{
return s[rt];
}
down(rt,r-l+1);
int ans=0;
int m=(l+r)/2;
if(left<=m)
ans+=query(left,right,l,m,rt<<1);
if(right>m)
ans+=query(left,right,m+1,r,rt<<1|1);
return ans;
}
int main()
{
intt,x,y,z,n,k,p=1;
scanf("%d",&t);
while(t--)
{
int ans=0;
scanf("%d%d",&n,&k);
build(1,n,1);
for(int i=0;
i
推荐阅读
- 有手就行7——*项目构建细节2-钩子(webhook)|有手就行7——*项目构建细节2-钩子(webhook) 配置
- Android免Root|Android免Root 修改程序运行时内存指令逻辑(Hook系统函数)
- React|React Hooks 入门记录
- 风起云涌之UBTC
- iOS|iOS UI控件埋点技术方案之基于runtime hook
- 根据tapable调试结果,手写SyncHook实现
- 波场万倍潜力币HYL23号21:09分 正式上线JustSwap
- 谈谈React|谈谈React Hooks 与Vue3.0 Function based API的区别()
- React-Hooks设计动机和工作模式
- FridaHook环境搭建