[ZJOI2019]线段树

https://www.luogu.org/blog/Sooke/solution-p5280

f不够,加上g

g的转移?要特别注意没有直接访问的点。分5类点

大力分类讨论即可。

#include<bits/stdc++.h>
#define reg register int
#define il inline
#define fi first
#define se second
#define mk(a,b) make_pair(a,b)
#define numb (ch^'0')
#define mid ((l+r)>>1)
using namespace std;
typedef long long ll;
template<class T>il void rd(T &x){char ch;x=0;bool fl=false;while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);for(x=numb;isdigit(ch=getchar());x=x*10+numb);(fl==true)&&(x=-x);
}
template<class T>il void output(T x){if(x/10)output(x/10);putchar(x%10+'0');}
template<class T>il void ot(T x){if(x<0) putchar('-'),x=-x;output(x);putchar(' ');}
template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');}namespace Miracle{
const int N=1e5+5;
const int mod=998244353;
int n,m;
int ad(int x,int y){return x+y>=mod?x+y-mod:x+y;
}
int mul(int x,int y){return (ll)x*y%mod;
}
struct node{int f,g,sumf;int mf,mg;
}t[4*N];
int T;
void pushup(int x){t[x].sumf=ad(ad(t[x<<1].sumf,t[x<<1|1].sumf),t[x].f);
}
void build(int x,int l,int r){if(l==r){t[x].g=1;t[x].f=0;t[x].mf=1;t[x].mg=1;return;}t[x].g=1;t[x].mf=1;t[x].mg=1;build(x<<1,l,mid);build(x<<1|1,mid+1,r);
}
void pushdown(int x){for(reg i=0;i<=1;++i){int son=(x<<1)|i;t[son].mf=mul(t[son].mf,t[x].mf);t[son].f=mul(t[son].f,t[x].mf);t[son].sumf=mul(t[son].sumf,t[x].mf);t[son].mg=mul(t[son].mg,t[x].mg);t[son].g=mul(t[son].g,t[x].mg);}t[x].mf=1;t[x].mg=1;
}
void upda(int x,int l,int r,int L,int R){if(L<=l&&r<=R){//2t[x].sumf=ad(mul(ad(t[x].sumf,mod-t[x].f),2),ad(t[x].f,T));t[x].f=ad(t[x].f,T);t[x].mf=mul(t[x].mf,2);//4
//        cout<<" f "<<t[x].f<<" sumf "<<t[x].sumf<<endl;return;}t[x].g=ad(t[x].g,T);pushdown(x);//1if(L<=mid&&mid<R){upda(x<<1,l,mid,L,R);upda(x<<1|1,mid+1,r,L,R);}else if(L<=mid){upda(x<<1,l,mid,L,R);int son=x<<1|1;//3t[son].sumf=ad(mul(ad(t[son].sumf,mod-t[son].f),2),ad(t[son].f,ad(T,mod-t[son].g)));t[son].f=ad(t[son].f,ad(T,mod-t[son].g));//        cout<<" f "<<t[son].f<<" sumf "<<t[son].sumf<<" g "<<t[son].g<<endl;t[son].g=mul(t[son].g,2);t[son].mf=mul(t[son].mf,2);//5t[son].mg=mul(t[son].mg,2);
//        cout<<son<<endl;
        }else{upda(x<<1|1,mid+1,r,L,R);int son=(x<<1);//3t[son].sumf=ad(mul(ad(t[son].sumf,mod-t[son].f),2),ad(t[son].f,ad(T,mod-t[son].g)));t[son].f=ad(t[son].f,ad(T,mod-t[son].g));t[son].g=mul(t[son].g,2);t[son].mf=mul(t[son].mf,2);//5t[son].mg=mul(t[son].mg,2);}pushup(x);
}
int main(){rd(n);rd(m);build(1,1,n);int op,l,r;T=1;while(m--){rd(op);if(op==1){rd(l);rd(r);upda(1,1,n,l,r);T=mul(T,2);}else{printf("%d\n",t[1].sumf);}}return 0;
}}
signed main(){Miracle::main();return 0;
}/*Author: *Miracle*Date: 2019/4/10 15:37:22
*/

转载于:https://www.cnblogs.com/Miracevin/p/10686184.html

[ZJOI2019]线段树相关推荐

  1. ZJOI2019 线段树

    ZJOI2019 线段树 题意: 题目传送门 题解: 来讲一个非常卡常的矩阵+线段树做法.首先转化一下题意,直接将\(2^m\)棵线段树建出来一定是不现实的,我们对于每一个节点,记录这个节点在所有线段 ...

  2. 【ZJOI2019】线段树【线段树上dp】【大讨论】

    题意:有一个 [1,n][1,n][1,n] 的线段树和 mmm 个区间赋值操作,求任取一个操作的子集并按顺序在线段树上跑后线段树上有 lazy 标记的点的个数之和 模 998244353998244 ...

  3. 二逼平衡树——树套树(线段树套Splay平衡树)

    题面 Bzoj3196 解析 线段树和Splay两棵树套在一起,常数直逼inf,但最终侥幸过了 思路还是比较简单, 在原数组维护一个下标线段树,再在每一个线段树节点,维护一个对应区间的权值Splay. ...

  4. 线段树——HDU - 1698

    题目含义 就是初始化一堆数为1 可以经过操作把一个区间的数都改变 并求这堆数的总大小 题目分析 有一个 #include<iostream> #include<stdio.h> ...

  5. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

  6. 【线段树分治 线性基】luoguP3733 [HAOI2017]八纵八横

    不知道为什么bzoj没有HAOI2017 题目描述 Anihc国有n个城市,这n个城市从1~n编号,1号城市为首都.城市间初始时有m条高速公路,每条高速公路都有一个非负整数的经济影响因子,每条高速公路 ...

  7. [bzoj1582][Usaco2009 Hol]Holiday Painting 节日画画_线段树

    Holiday Painting 节日画画 bzoj-1582 Usaco-2009 Hol 题目大意:给定两个n*m的01网格图.q次操作,每次将第二个网格图的子矩阵全部变成0或1,问每一次操作后两 ...

  8. codefores 786B. Legacy(最短路,线段树优化拆点,好题)

    题目链接 B. Legacy time limit per test2 seconds memory limit per test256 megabytes inputstandard input o ...

  9. 【题解】BZOJ 3065: 带插入区间K小值——替罪羊树套线段树

    题目传送门 题解 orz vfk的题解 3065: 带插入区间K小值 系列题解 一 二 三 四 惨 一开始用了一种空间常数很大的方法,每次重构的时候merge两颗线段树,然后无限RE(其实是MLE). ...

最新文章

  1. python 无头模式 绕过检测_Python chrome 无头模式的问题
  2. rman备份常用命令
  3. bootstarp js设置列隐藏_Bootstrap框架----DataTables列表移动端适配定义隐藏列
  4. tkmybatis开启二级缓存
  5. Fiddler4——手机抓包
  6. CSS布局大全-案例
  7. 火狐浏览器表单不跳转_火狐浏览器的表单问题,求解_html/css_WEB-ITnose -
  8. caffe安装步骤(Anaconda,Windows10环境下)
  9. Android如何播放一组音频文件(类似支付宝收款播报或者叫号播报)
  10. 图表排版设计html,网页的排版(表格篇上)
  11. sox处理mp3_sox 转码 amr转MP3
  12. 微信公众号接入百度机器人
  13. 救命啊!还是讨厌的中文问题
  14. VS2019怎么没有C++的窗体应用模板_砖混结构模板技术交底
  15. Thinkbook16+ 2022 安装Ubuntu20.04
  16. 怎么运用苹果手机拍出好的照片,这些技巧少不了
  17. 基于爱奇艺HCDN视频分发网络的开放缓存
  18. 锂离子电池热失控预警资料整理(三)
  19. 自学编程好还是参加培训班好?
  20. speedoffice(PPT)怎么添加下划线

热门文章

  1. hive常用sql语句
  2. laravel 登录失效
  3. Sth about Haml
  4. FCKEditor最新上传漏洞(ASP),允许上传“.asp;jpg”类型文件解决方案
  5. clisp语言中的包
  6. VC6安装错误——Error Launching ......acmboot.exe
  7. Python3 与 C# 面向对象之~封装
  8. 【程序员归家计划】放假回家之前拜服务器?不存在的,这才是保证程序员过好年的正确打开方式...
  9. 先定一个小目标,自己封装个ajax
  10. 介绍两个Eclipse插件: Implementors Call Hierarchy