cf 121 E 线段树解法

题意:给n个数 m次操作 操作方式为 count 统计区间里的幸运数字都多少个 add给区间里每个数都加上一个值 

网上的大牛都是用树状数组写的 线段树也可以解决 只是有点悬  刚学线段树 借此加强知识储备和代码能力 线段树单点更新 谢谢各位指教

#include<iostream>
#include<cstdio>
#include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int n,m; int ans; int a[1000000]; int tree[1000000]; int b[50]={0,4,7,44,47,74,77,444,447,474,477,744,747,774,777,4444,4447,4474,4477,4744,4747,4774,4777,7444,7447,7474,7477,7744,7747,7774,7777,}; int f[1000000]; void pushup(int id) { tree[id]=tree[id*2]+tree[id*2+1]; } void Update(int id,int le,int ri,int x,int k) { if(le==ri) { tree[id]+=k; return; } int mid=(le+ri)/2; if(x<=mid) Update(id*2,le,mid,x,k); else Update(id*2+1,mid+1,ri,x,k); pushup(id); } int query(int id,int le,int ri,int ll,int rr) { if(ll<=le&&ri<=rr) return tree[id]; int mid=(le+ri)/2,k=0; if(ll<=mid) k+=query(id*2,le,mid,ll,rr); if(rr>mid) k+=query(id*2+1,mid+1,ri,ll,rr); return k; } int main() { 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值