题目

23333

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#define For(i,x,y) for(int i=x;i<=y;++i)
using namespace std;
const int N = 1e5+5;
const int P = 998244353;
int pw(int x,int y){int p=1;for(;y;y>>=1,x=(1ll*x*x)%P) if(y&1) p=(1ll*p*x)%P;return p;}
int inv(int x){return pw(x,P-2);}
int n,q,rt[N*4];
void mul(int&x,int y){x=((1-2ll*y)*x+y)%P;}
struct Seg{int ls[N*230],rs[N*230],w[N*230][2],tot;void ins(int&p,int l,int r,int x,int v){if(!p) p=++tot;mul(w[p][0],v);mul(w[p][1],(v+v)%P);if(l==r) return;int m=l+r>>1;if(x<=m) ins(ls[p],l,m,x,v);else     ins(rs[p],m+1,r,x,v);}int query(int p,int l,int r,int x,int y,int v){if(!p||x<=l&&r<=y) return w[p][v];int m=l+r>>1; int res=0;if(x<=m) mul(res,query(ls[p],l,m,x,y,v));if(y> m) mul(res,query(rs[p],m+1,r,x,y,v));return res;}
}T;
void ins(int p,int l,int r,int x,int y,int v){T.ins(rt[p],1,n,y,v);if(l==r) return;int m=l+r>>1;if(x<=m) ins(p<<1,l,m,x,y,v);else     ins(p<<1|1,m+1,r,x,y,v);
}
int query(int p,int l,int r,int xl,int xr,int yl,int yr,int v){if(xl<=l&&r<=xr) return T.query(rt[p],1,n,yl,yr,v);int m=l+r>>1;int res=0;if(xl<=m) mul(res,query(p<<1,l,m,xl,xr,yl,yr,v));if(xr> m) mul(res,query(p<<1|1,m+1,r,xl,xr,yl,yr,v));return res;
}
bool F;
int main(){scanf("%d%d",&n,&q);for(int opt,x,y;q--;){scanf("%d%d%d",&opt,&x,&y);if(opt==1){F^=1;int p=inv(y-x+1);ins(1,0,n,x,y,p);}else{--x;int T=0;mul(T,query(1,0,n,0,x,y,n,1));mul(T,query(1,0,n,0,x,x,y-1,0));mul(T,query(1,0,n,x+1,y,y,n,0));for(;T<0;T+=P);if(x||!F) T=(1-T+P)%P;printf("%d\n",T);}}
}

转载于:https://www.cnblogs.com/rwy233/p/6631848.html

UOJ291 BZOJ4785 ZJOI2017树状数组相关推荐

  1. 洛谷P3688/uoj#291. [ZJOI2017]树状数组

    传送门(uoj) 传送门(洛谷) 这里是题解以及我的卡常数历程 话说后面那几组数据莫不是lxl出的这么毒 首先不难发现这个东西把查询前缀和变成了查询后缀和,结果就是查了\([l-1,r-1]\)的区间 ...

  2. [ZJOI2017]树状数组

    以后写题前还是要冷静分析清楚再动手啊..... $ Think \ twice,code \ once$ 传送门:here 大致题意: 有一个写挂的树状数组,$ query$的是后缀和,$ query ...

  3. ●洛谷P3688 [ZJOI2017]树状数组

    题链: https://www.luogu.org/problemnew/show/P3688 题解: 二维线段树. 先不看询问时l=1的特殊情况. 对于一个询问(l,r),如果要让错误的程序得到正确 ...

  4. 洛谷 P5057 [CQOI2006]简单题(树状数组)

    嗯... 题目链接:https://www.luogu.org/problem/P5057 首先发现这道题中只有0和1,所以肯定与二进制有关.然后发现这道题需要支持区间更改和单点查询操作,所以首先想到 ...

  5. Color the ball(HDU1556)树状数组

    每次对区间内气球进行一次染色,求n次操作后后所有气球染色次数. 树状数组,上下区间更新都可以,差别不大. 1.对于[x,y]区间,对第x-1位减1,第y位加1,之后向上统计 #include<b ...

  6. 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组

    [BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...

  7. Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)

    题意: 线段树做法 分析: 因为每次都是在当前位置的前缀区间查询最大值,所以可以直接用树状数组优化.比线段树快了12ms~ 代码: #include<cstdio> #include< ...

  8. poj_3067 树状数组

    题目大意 左右两个竖排,左边竖排有N个点,从上到下依次标记为1,2,...N; 右边竖排有M个点,从上到下依次标记为1,2....M.现在从K条直线分别连接左边一个点和右边一个点,求这K条直线的交点个 ...

  9. hdu 1166 敌兵布阵(树状数组)

    题意:区间和 思路:树状数组 #include<iostream> #include<stdio.h> #include<string.h> using names ...

  10. Equalizing Two Strings 冒泡排序or树状数组

    首先考虑排序后相等 如果排序后相等的话就只考虑reverse长度为2的,所以a或者b排序后存在相邻两个字母相等的话就puts YES,n>26也直接puts YES 不然的话就假设c为a,b排完 ...

最新文章

  1. 快速排序与合并排序的分而治之
  2. [云炬python3玩转机器学习笔记] 2-5机器学习相关的哲学思考
  3. 如何实现少样本学习?先让神经网络get√视觉比较能力
  4. 剑指offer 求1+2+3+...+n
  5. Sharepoint Designer 2007 Workflow
  6. JavaOne 2012:掌握Java部署
  7. github ssl验证跳过
  8. 三种强大的物体识别算法——SIFT/SURF、haar特征、广义hough变换的特性对比分析
  9. java string hash变量_java基础(六)-----String性质深入解析
  10. 计算机三级之嵌入式系统学习笔记4
  11. Data truncation: Data too long for column错误分析
  12. Windows Server 2003 来配置网络地址转换 (NAT
  13. excel表格数字显示不全_Excel表格中输入数字最后几位数变成0的解决方法
  14. Java实现——求指定年份的父亲节(母亲节)是几月几号
  15. ccproxy如何设置
  16. Java计算当前时间,结合时区
  17. 典型相关性分析(清风建模学习笔记)
  18. 制作背景透明图标的小工具(附源代码)
  19. 74LVC2G14GW 封装 SOT363 栅极/逆变器芯片
  20. 搜索局域网内电脑共享文件的方法

热门文章

  1. jquery 如何控制滚动条每次向下滚动300px
  2. Sublime Text 3运行JavaScript控制台
  3. [Yii][RBAC]Yii中应用RBAC完全指南
  4. Laravel服务容器
  5. project 2013使用记录
  6. OpenWrt 编译分割
  7. C#结合VS开发WinForm学习笔记
  8. Ajax程序设计入门
  9. 响应头中content-type常用的类型有哪些?
  10. 爬取豌豆荚app数据(总结篇)