JZOJ 5943. 树
Description
Input
第三行一个整数 q 表示操作次数, 接下来 q 行每行一次操作, 格式同题目描述.
Output
Sample Input
Sample Input1
5
8 4 3 5 6
5
2 3 5
3 1 2
1 2 4 3
2 3 5
3 1 2 样例 2
见下发文件中的 ex_seg2.in/out.
Sample Output
Sample Output1
14
608
10
384 样例 1 解释
第三次操作后, 序列变为 [8, 0, 3, 1, 6].
#include <cstdio>
#include <cstring>
#include <iostream>
#define mo 998244353
#define LL long long
#define N 100007
using namespace std;
struct tree{
LL s,sum1,sum2;
int l,r;
}e[N*];
int n,q,a[N];
LL ans,sum; int read(){
int s=;
char ch=getchar();
for(;ch<''||ch>'';ch=getchar());
for(;ch>=''&&ch<='';s=s*+ch-'',ch=getchar());
return s;
} inline void Build(int p,int l,int r){
if (l==r){
e[p].l=l,e[p].r=r;
e[p].s=a[l];
e[p].sum1=a[l];
e[p].sum2=e[p].s*e[p].s%mo;
return;
}
int mid=(l+r)>>;
Build(p<<,l,mid);
Build(p<<|,mid+,r);
e[p].l=l;
e[p].r=r;
e[p].s=e[p<<].s|e[p<<|].s;
e[p].sum1=e[p<<].sum1+e[p<<|].sum1;
e[p].sum2=(e[p<<].sum2+e[p<<|].sum2)%mo;
} void Init(){
n=read();
for(int i=;i<=n;i++) a[i]=read();
Build(,,n);
q=read();
} void query(int p,int l,int r){
if (e[p].l>=l&&e[p].r<=r){
ans+=e[p].sum1;
return;
}
int mid=(e[p].l+e[p].r)>>;
if (mid>=r) query(p<<,l,r);
else if(mid<l) query(p<<|,l,r);
else query(p<<,l,r),query(p<<|,l,r);
} void update(int p,int l,int r,int x){
if ((e[p].s&x)==e[p].s) return;
if (e[p].l==e[p].r){
e[p].s&=x;
e[p].sum1=e[p].s;
e[p].sum2=e[p].s*e[p].s%mo;
return;
}
int mid=(e[p].l+e[p].r)>>;
if (mid>=r) update(p<<,l,r,x);
else if(mid<l) update(p<<|,l,r,x);
else update(p<<,l,r,x),update(p<<|,l,r,x);
e[p].s=e[p<<].s|e[p<<|].s;
e[p].sum1=e[p<<].sum1+e[p<<|].sum1;
e[p].sum2=(e[p<<].sum2+e[p<<|].sum2)%mo;
} void chaxun(int p,int l,int r){
if (e[p].l>=l&&e[p].r<=r){
sum=(sum+e[p].sum2)%mo;
return;
}
int mid=(e[p].l+e[p].r)>>;
if (mid>=r) chaxun(p<<,l,r);
else if(mid<l) chaxun(p<<|,l,r);
else chaxun(p<<,l,r),chaxun(p<<|,l,r);
} int main(){
freopen("seg.in","r",stdin);
freopen("seg.out","w",stdout);
Init();
while(q--){
int x,y,l,r;
x=read();
if (x==){
l=read(),r=read(),y=read();
update(,l,r,y);
}
if (x==){
l=read(),r=read();
ans=;
query(,l,r);
printf("%lld\n",ans);
}
if (x==){
l=read(),r=read();
sum=;
ans=;
query(,l,r);
chaxun(,l,r);
ans%=mo;
sum%=mo;
printf("%lld\n",(sum*(r-l+)%mo*%mo+(ans*ans)%mo*)%mo);
}
}
}
JZOJ 5943. 树的更多相关文章
- [JZOJ 5814] 树
题目:从u到v经过多少条边. 思路: 考虑他是怎么走的?? 从\(u\)到\(v\)一定是\(fa[u]\),\(fa[fa[u]]\),反正就是走\(LCA\),那么如果算出每个点到父亲的期望步数, ...
- [jzoj 3175] 数树数 解题报告 (树链剖分)
interlinkage: https://jzoj.net/senior/#main/show/3175 description: 给定一棵N 个节点的树,标号从1~N.每个点有一个权值.要求维护两 ...
- [jzoj 5662] 尺树寸泓 解题报告 (线段树+中序遍历)
interlinkage: https://jzoj.net/senior/#contest/show/2703/1 description: solution: 发现$dfs$序不好维护 注意到这是 ...
- [jzoj 6086] [GDOI2019模拟2019.3.26] 动态半平面交 解题报告 (set+线段树)
题目链接: https://jzoj.net/senior/#main/show/6086 题目: 题解: 一群数字的最小公倍数就是对它们质因数集合中的每个质因数的指数取$max$然后相乘 这样的子树 ...
- [JZOJ 5908] [NOIP2018模拟10.16] 开荒(kaihuang)解题报告 (树状数组+思维)
题目链接: https://jzoj.net/senior/#contest/show/2529/1 题目: 题目背景:尊者神高达作为一个萌新,在升级路上死亡无数次后被一只大黄叽带回了师门.他加入师门 ...
- [JZOJ 5909] [NOIP2018模拟10.16] 跑商(paoshang) 解题报告 (圆方树)
题目链接: https://jzoj.net/senior/#contest/show/2529/2 题目: 题目背景:尊者神高达很穷,所以他需要跑商来赚钱题目描述:基三的地图可以看做 n 个城市,m ...
- JZOJ P5829 HZOI 20190801 A string 线段树
JZOJ P5829 A. string 题面:https://www.cnblogs.com/Juve/articles/11286476.html 考场上想起了排序这道题:https://www. ...
- (jzoj snow的追寻)线段树维护树的直径
jzoj snow的追寻 DFS序上搞 合并暴力和,记录最长链和当前最远点,距离跑LCA # include <stdio.h> # include <stdlib.h> # ...
- JZOJ 4738. 神在夏至祭降下了神谕 DP + 线段树优化
4738. 神在夏至祭降下了神谕 Time Limits: 1000 ms Memory Limits: 262144 KB Detailed Limits Goto ProblemSet D ...
随机推荐
- BSTR和CComBSTR使用指南
msdn关于bstr的分配和释放的注意事项:http://msdn.microsoft.com/zh-cn/library/cc485262(VS.71).aspx msdn对 CComBSTR 的使 ...
- Network Request Failed
在react native项目中,有时候调用接口会出现这样的错误提示:“Network Request Failed”. 一.模拟器上报“Network Request Failed”解决办法,也是官 ...
- leetcode-pascal triangle I&&II
对于第2个pascal triangle,通过观察可以发现,其实只需要2个额外的变量来记录,于是就设了个tmp数组. 整体有点DP问题中的滚动数组的感觉. #include <vector> ...
- 数据结构学习-数组A[m+n]中依次存放两个线性表(a1,a2···am),(b1,b2···bn),将两个顺序表位置互换
将数组中的两个顺序表位置互换,即将(b1,b2···bn)放到(a1,a2···am)前边. 解法一: 将数组中的全部元素(a1,a2,···am,b1,b2,···bn)原地逆置为(bn,bn-1, ...
- Vim中 ctags 跳转直接跳到第一个匹配行的问题
意图 用ctags搜索代码时, 用 ctrl + ] 后,只有一个匹配项直接跳转,有多个则列出所有匹配项选择跳转 问题 在 vim 中使用 ctags 是一个很令人舒服的事情,但有时一些默认的配置和不 ...
- python manage.py startapp app 时候报错No module named _sqlite3
python manage.py startapp app 报错如下: File "manage.py", line 10, in <module> execut ...
- Asp.net网站优化【转】
阅读目录 开始 配置OutputCache 启用内容过期 解决资源文件升级问题 启用压缩 删除无用的HttpModule 其它优化选项 本文将介绍一些方法用于优化ASP.NET网站性能,这些方法都是不 ...
- 【牛客挑战赛30D】小A的昆特牌(组合问题抽象到二维平面)
点此看题面 大致题意: 有\(S\)张无编号的牌,可以将任意张牌锻造成\(n\)种步兵或\(m\)种弩兵中的一种,求最后步兵数量大于等于\(l\)小于等于\(r\)的方案数. 暴力式子 首先我们来考虑 ...
- [19/03/22-星期五] 异常(Exception)(二)_捕获异常
一.概念 捕获异常是通过3个关键词来实现的:try-catch-finally.用try来执行一段程序,如果出现异常,系统抛出一个异常,可以通过它的类型来捕捉(catch)并处理它, 最后一步是通过f ...
- WPF学习笔记(7):DataGrid中数字自定义格式显示
DataGrid中数据显示如下图,数据格式比较杂乱.希望达到以下要求:(1)所有数据保留两位小数:(2)超过1000的数字显示千分位:(3)如果数据为0,不显示. 首先想到用StringFormat进 ...