要特别注意下精度,long,int范围。WA了几次

import java.util.Scanner;

class Main {
// static long[] A2 ;//i^2*AI
// static long[] A1;//i*Ai;
static long[] A; //Ai;
static long[] f2;
static long[] f1;
static long[] f0;
static long power2; static long MOD = 998244353l; public static long power(long a,long power){
if(power == 1){
return a;
}
if(power == 0){
return 1;
}
long x = power(a,power/2);
if(power %2 == 0){
return x*x%MOD;
}
return (x*x%MOD)*a%MOD;
} public static void main(String[] args) {
int n,q;
Scanner in = new Scanner(System.in);
n = in.nextInt();
q = in.nextInt();
A = new long[n+1];
// A2 = new long[n+1];
// A1 = new long[n+1]; f0 = new long[4*n+1];
f1 = new long[4*n+1];
f2 = new long[4*n+1]; power2 = power(2,MOD -2);
for (int i = 1; i <=n; i++) {
A[i] = in.nextLong();
// A1[i] = A[i]*i%MOD;
// A2[i] = A[i]*i%MOD*i%MOD;
}
//构造树
buildTree(1,1,n);
//查询
for (int i = 0; i < q; i++) {
int op = in.nextInt();
if(op == 1){
int x = in.nextInt();
long v = in.nextInt();
updateTree(1,1,n,x,v);
}else{
int x = in.nextInt();
long ans = query(1,1,n,1,x,x);
System.out.println(ans);
}
}
} public static long query(int index,int l,int r,int L,int R,int x){
if(l == L && r== R){
long ans = (f2[index] - f1[index]*(2*x+3)%MOD + f0[index]*(x+1)%MOD*(x+2)%MOD + MOD)%MOD*power2%MOD;
ans = ans % MOD;
ans = (ans+ MOD) % MOD;
return ans;
}
int mid = (l+r) / 2;
if(R<=mid){
long ans = query(index*2,l,mid,L,R,x);
return ans;
}else{
if(L>mid){
return query(index*2+1,mid+1,r,L,R,x);
}else{
long ans = query(index*2,l,mid,L,mid,x);
ans +=query(index*2+1,mid+1,r,mid+1,R,x);
ans %=MOD;
return ans;
}
}
} public static void updateTree(int index,int l,int r,int x,long v){
if( l==r) {
A[x] = v;
f0[index] = v;
f1[index] = v*l%MOD;
f2[index] = v*l%MOD*l%MOD;
return;
}
int mid = (l+r)/2;
if(x<=mid){
//更新左边
updateTree(index*2,l,mid,x,v);
}else{
updateTree(index*2+1,mid+1,r,x,v);
} f0[index] = f0[2*index] + f0[2*index+1];
f0[index] %=MOD;
f1[index] = f1[2*index] + f1[2*index+1];
f1[index] %= MOD;
f2[index] = f2[2*index] + f2[2*index+1];
f2[index] %=MOD;
} public static void buildTree(int index,int l,int r){
if( l == r){
f0[index] = A[l];
f1[index] = A[l]*l%MOD;
f2[index] = A[l]*l%MOD*l%MOD;
return;
}
int mid = (l+r)/2; buildTree(2*index,l,mid);
buildTree(2*index+1,mid+1,r); f0[index] = f0[2*index] + f0[2*index+1];
f0[index] %=MOD;
f1[index] = f1[2*index] + f1[2*index+1];
f1[index] %= MOD;
f2[index] = f2[2*index] + f2[2*index+1];
f2[index] %=MOD;
}
}

【Atcoder F - Cumulative Cumulative Cumulative Sum】线段树的更多相关文章

  1. 【题解】 AtCoder ARC 076 F - Exhausted? (霍尔定理+线段树)

    题面 题目大意: 给你\(m\)张椅子,排成一行,告诉你\(n\)个人,每个人可以坐的座位为\([1,l]\bigcup[r,m]\),为了让所有人坐下,问至少还要加多少张椅子. Solution: ...

  2. AtCoder Regular Contest 063 F : Snuke’s Coloring 2 (线段树 + 单调栈)

    题意 小 \(\mathrm{C}\) 很喜欢二维染色问题,这天他拿来了一个 \(w × h\) 的二维平面 , 初始时均为白色 . 然后他在上面设置了 \(n\) 个关键点 \((X_i , Y_i ...

  3. Codeforces Round #463 F. Escape Through Leaf (李超线段树合并)

    听说正解是啥 set启发式合并+维护凸包+二分 根本不会啊 , 只会 李超线段树合并 啦 ... 题意 给你一颗有 \(n\) 个点的树 , 每个节点有两个权值 \(a_i, b_i\) . 从 \( ...

  4. 【BZOJ3638】Cf172 k-Maximum Subsequence Sum 线段树区间合并(模拟费用流)

    [BZOJ3638]Cf172 k-Maximum Subsequence Sum Description 给一列数,要求支持操作: 1.修改某个数的值 2.读入l,r,k,询问在[l,r]内选不相交 ...

  5. CF280D k-Maximum Subsequence Sum(线段树)

    在做这题时我一开始把\(tag\)写入了结构体 #include <iostream> #include <cstdio> #include <cstring> # ...

  6. Codeforces Round #271 (Div. 2) F. Ant colony (RMQ or 线段树)

    题目链接:http://codeforces.com/contest/474/problem/F 题意简而言之就是问你区间l到r之间有多少个数能整除区间内除了这个数的其他的数,然后区间长度减去数的个数 ...

  7. BZOJ 3155: Preprefix sum( 线段树 )

    刷刷水题... 前缀和的前缀和...显然树状数组可以写...然而我不会, 只能写线段树了 把改变成加, 然后线段树维护前缀和, 某点p加, 会影响前缀和pre(x)(p≤x≤n), 对[p, n]这段 ...

  8. Codeforces Round #271 (Div. 2) F题 Ant colony(线段树)

    题目地址:http://codeforces.com/contest/474/problem/F 由题意可知,最后能够留下来的一定是区间最小gcd. 那就转化成了该区间内与区间最小gcd数相等的个数. ...

  9. ZOJ 4009 And Another Data Structure Problem(ZOJ Monthly, March 2018 Problem F,发现循环节 + 线段树 + 永久标记)

    题目链接  ZOJ Monthly, March 2018 Problem F 题意很明确 这个模数很奇妙,在$[0, mod)$的所有数满足任意一个数立方$48$次对$mod$取模之后会回到本身. ...

  10. 校赛F 比比谁更快(线段树)

    http://acm.cug.edu.cn/JudgeOnline/problem.php?cid=1153&pid=5 题意:给你一个字符串,各两个操作: ch=0,[l,r]降序 ch=1 ...

随机推荐

  1. 【奶奶看了都会】ComfyUI+SVD制作AI视频教程,附效果演示

    AI一天,人间一年 大家好啊,我是小卷,最近AI绘画又发展出一些新玩意了,小卷因为工作的关系有一个月没关注AI的发展了,都有点跟不上版本节奏了... 1.comfyui的使用效果 今天给大家介绍下AI ...

  2. 微信小程序 Path2D 不支持 svg 路径的解决办法

    问题 开发一个微信小程序项目的时候需要用到Path2D这个对象,但是发现小程序的Path2D对象不支持实例化的时候直接传入'svg path',导致下面的代码运行的时候报错(浏览器中可运行) #其它代 ...

  3. TValue 的 TTypeKind 的自动转换

    首先官方的定义: TTypeKind = (tkUnknown, tkInteger, tkChar, tkEnumeration, tkFloat, tkString, tkSet, tkClass ...

  4. crontab 里如何创建带日期的日志文件

    需求在crontab 执行定时任务时,将执行的任务输出到带日期的文件中 crontab中,执行脚本需要传入系统时间date +"%Y-%m-%d" 问题今天遇到一个crontab问 ...

  5. Spring Boot 单元测试笔记

    1. 导入JUnit5测试框架 <dependency> <groupId>org.springframework.boot</groupId> <artif ...

  6. ES6学习 第七章 函数的扩展

    前言 本章介绍函数的扩展.有些不常用的知识了解即可. 本章原文链接:函数的扩展. 函数参数的默认值 ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面. 当函数形参没有被赋值时,才会将默认值 ...

  7. 统一日志输出打印POST请求参数

    众所周知,request.getInputStream()只能调一次.如果希望在请求进入Controller之前统一打印请求参数(拦截器或过滤器),又不影响业务,我们只能将获取到的输入流缓存起来,后续 ...

  8. 贝壳云P1刷机记录(5.10内核Armbian)

    说明 贝壳云基于瑞芯微的RK3328芯片, 芯片介绍, Cortex-A53架构, 4核, 1G内存, 8G eMMC. 板载1个千兆网口, 4个USB3.0. 这个盒子比较赞的地方就是不到百元的价格 ...

  9. Mybatis的缓存过期机制和RedisCache

    MyBatis的缓存过期机制, flushInterval参数 在实际测试中, 发现Redis中的缓存数据TTL为-1, 在Hash中的key也无过期时间信息, 怀疑RedisCache的实现是否能正 ...

  10. 【Android】使用Binder实现进程间传递对象案例

    1 前言 使用AIDL实现进程间通讯简单案例 和 使用AIDL实现进程间传递对象案例 中介绍了使用 AIDL 进行进程间通讯,其本质仍然是Binder,aidl 文件对应生成的接口中,将服务端调用的抽 ...