社区讨论

求问两者差别

P4231三步必杀参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mhiyw7f0
此快照首次捕获于
2025/11/03 17:58
4 个月前
此快照最后确认于
2025/11/03 17:58
4 个月前
查看原帖
rt,今日复习二阶差分时发现我这样子写是会错的。
CPP
# include <bits/stdc++.h>
# define int long long 
using namespace std ; 
constexpr int N = 2e5 + 5 ; 
int n , m , diff[N] , a1[N] , xors , maxv ;
// a_n = a_1 + ( n - 1 ) * d ; 
signed main () {
	ios::sync_with_stdio ( false ) , cin.tie ( 0 ) , cout.tie ( 0 ) ; 
	cin >> n >> m ; for ( int i = 1 ; i <= m ; ++ i ) {
		int l , r , s , e ;
		cin >> l >> r >> s >> e ; 
		int d = ( e - s ) / ( r - l ) ; 
		a1[l] += s , a1[r + 1] -= s ;  0// 这里为修改a1贡献,原本为a1[r+1]-=e
		diff[l + 1] += d , diff[r + 1] -= d * ( r - l + 1 ) ; // diff 修改不同
	}
	int as = 0 , ds = 0 ; 
	for ( int i = 1 ; i <= n ; ++ i ) {
		diff[i] += diff[i - 1] ; 
		as += a1[i] ; 
		ds += diff[i] ; 
		int v = as + ds ; 
		xors ^= v , maxv = max ( maxv , v ) ; 
	}
	return cout << xors << " " << maxv << '\n' , 0 ;
}
我感觉把等差数列拆成首项和公比维护也没啥差别啊,有无大佬讲解一下这两者的意义有何不同。

回复

1 条回复,欢迎继续交流。

正在加载回复...