线段树判一段里面有几段不同的颜色以及更新操作
2017-11-14 18:48
239 查看
代码
一道题目看错题意写出来的。
有更新操作,就是往某个区间每一个数加值,再看所有区间有几段不同的
样例
Input
5
5 5 5 5 5
3
1 3 2
2 2 1
4 4 1
Output
2
4
5
一道题目看错题意写出来的。
有更新操作,就是往某个区间每一个数加值,再看所有区间有几段不同的
样例
Input
5
5 5 5 5 5
3
1 3 2
2 2 1
4 4 1
Output
2
4
5
#include <bits/stdc++.h> using namespace std; const int MAXN =3e5+100; #define L(x) (x<<1) #define R(x) (x<<1|1) int a[MAXN]; typedef long long ll; struct node { int l,r; int num; ll tag,lc,rc; }segtree[MAXN<<2]; void push_up(int rt) { segtree[rt].lc=segtree[L(rt)].lc;segtree[rt].rc=segtree[R(rt)].rc; int ans=segtree[L(rt)].num+segtree[R(rt)].num; if(segtree[L(rt)].rc==segtree[R(rt)].lc) ans--; segtree[rt].num=ans; } void push_down(int rt) { if(segtree[rt].tag){ segtree[L(rt)].tag+=segtree[rt].tag; segtree[R(rt)].tag+=segtree[rt].tag; segtree[L(rt)].lc+=segtree[rt].tag; segtree[L(rt)].rc+=segtree[rt].tag; segtree[R(rt)].lc+=segtree[rt].tag; segtree[R(rt)].rc+=segtree[rt].tag; segtree[rt].tag=0; } } void build(int rt,int l,int r) { segtree[rt].l=l;segtree[rt].r=r;segtree[rt].num=0; if(l==r) { segtree[rt].num=1,segtree[rt].lc=segtree[rt].rc=1ll*a[l]; return ; } int mid=(l+r)>>1; build(L(rt),l,mid);build(R(rt),mid+1,r); push_up(rt); } void update(int l,int r,ll x,int rt) { if(l<=segtree[rt].l&&r>=segtree[rt].r) { segtree[rt].tag+=x; segtree[rt].lc+=x; segtree[rt].rc+=x; return ; } push_down(rt); int mid=(segtree[rt].l+segtree[rt].r)>>1; if(l<=mid) update(l,r,x,L(rt)); if(r>mid) update(l,r,x,R(rt)); push_up(rt); } int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); build(1,1,n); int q; scanf("%d",&q); while(q--) { int l,r; ll d; scanf("%d%d%lld",&l,&r,&d); update(l,r,d,1); printf("%d\n",segtree[1].num ); } }
相关文章推荐
- 线段树(区间更新以及统计片段颜色)
- 线段树经典操作模板(单点更新,替换;区间更新,替换;区间求和求最值)
- 8.给UILabel分段设置不同的颜色以及设置每行的间距
- 添加删除、更新按钮的提示确认信息,以及DATAGRID的添加、插入、更新、删除操作。
- CLOB字段的插入以及更新操作 .
- Necklace (线段树单点更新+区间查询+离线操作)
- Linux下不同颜色命de文件类型 以及重要de配置文件
- 蓝桥杯 操作格子(线段树的更新)
- 一个WinForm记事本程序(包含主/下拉/弹出菜单/打开文件/保存文件/打印/页面设置/字体/颜色对话框/剪切版操作等等控件用法以及记事本菜单事件/按键事件的具体代码)
- UILabel设置一段文字不同颜色和不同大小
- 线段树基本操作(单点更新,区间更新,区间最大最小值,区间和)poj3468&poj3264&hdu1698&&hdu1166&hdu1754
- 一段文字内有不同颜色字体交叉显示
- 树——线段树区间不同修改操作
- JEditorPane/JTextPane常见操作(字体,颜色,字号,加粗,斜线,下划线,保存,行间距 等操作)以及HTML空格处理
- Codeforces 719E [斐波那契区间操作][矩阵快速幂][线段树区间更新]
- mysql的插表以及更新操作导致的死锁问题
- 改进xutils下载管理器,使其,在随意地方进行进度更新,以及其它状态监听操作
- 4、MongoDB集合里面文档的插入,查找,更新操作
- hdu----(5023)A Corrupt Mayor's Performance Art(线段树区间更新以及区间查询)
- delphi中关于dbgrideh的DrawColumnCell事件,窗体重画,让每个单元格以及字体显示不同的颜色