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 ...
随机推荐
- adnroid 自定义ProgressDialog加载中
用来记录自己所用到的知识 前两天在做项目的时候发现有时候在访问网络数据的时候由于后台要做的工作较多,给我们返回数据的时间较长,所以老大叫我加了一个加载中的logo图用来提高用户体验. 于是就在网上找了 ...
- 关于Android中的ViewTreeObserver
ViewTreeObserver结构 extends Object java.lang.Object ↳ android.view.ViewTreeObserver ViewTreeObserver概 ...
- day2 数据结构和一些基础知识
请查看我的云笔记链接: http://note.youdao.com/noteshare?id=4171342601326695ec87866e1cc3e410&sub=20CFB149543 ...
- May 16th 2017 Week 20th Tuesday
The most fearful enemy is not having a firm conviction. 最可怕的敌人,就是没有坚强的信念. A firm conviction or belie ...
- python接口测试-项目实践(五) 实际结果与预期结果对比之 接口对比
五 与开发接口对比 1 分别将三个接口封装成三个函数,传入接口参数,返回提取并处理后的各字段. 拼接字符串作为单独的函数. def api_1(code): 发送请求获取响应 提取响应数据 响应数据转 ...
- python+requests+json 接口测试思路示例
实际项目中用python脚本实现接口测试的步骤: 1 发送请求,获取响应 >>2 提取响应里的数据,对数据进行必要的处理 >>3 断言响应数据是否与预期一致 以豆瓣接口为例 ...
- OC block声明和使用
#import "Button.h" typedef int (^MySum) (int, int); void test() { // 定义了一个block,这个block返回值 ...
- Android(java)学习笔记37:String类型的面试题
1. String类型面试题: package cn.itcast_02; /* * String s = new String(“hello”)和String s = “hello”;的区别? * ...
- 【洛谷5287】[HNOI2019] JOJO(主席树优化KMP)
点此看题面 大致题意: 每次往一个字符串末尾加上\(x\)个字符\(c\),或者回到某一历史版本,求\(KMP\)的\(\sum Next_i\). 问题转化 考虑到可以离线. 于是,我们就可以用一个 ...
- Git使用02--branch分支, tag版本, 忽略文件 .gitingore
一.分支 # 查看分支 git branch # 创建分支 git branch 分支名 # 切换分支 git checkout name # 创建并切换分支 git checkout -b name ...