首页 > 其他分享 >2024.06 别急记录

2024.06 别急记录

时间:2024-06-17 13:09:56浏览次数:9  
标签:2024.06 dbinom 别急 记录 int dfrac sum ans ll

1. Ynoi2009 - rprsvq

首先有方差 \(=\dfrac{n-1}{n^2}\sum a_i^2-\dfrac2{n^2}\sum a_ia_j\)。

还有结论:对于大小为 \(n\) 的集合 \(S\),所有 \(\dbinom nt\) 个大小为 \(t\) 的子集中,含有给定大小为 \(k\) 的子集的集合个数为 \(\dbinom {n-k}{t-k}\)。

那么一个序列 \(a_1,...,a_n\) 的子序列的方差和就是:

\(\sum_{t=1}^n\dfrac{t-1}{t^2}\dbinom{n-1}{t-1}\sum a_i^2-2\sum_{t=1}^n\dfrac 1{t^2}\dbinom{n-2}{t-2}\sum a_ia_j\)。

\(\sum_{t=1}^n\dfrac{\dbinom{n-2}{t-2}}{t^2}[n\sum a_i^2-(\sum a_i)^2]\)。

右半边使用线段树维护,左半边 \(=\dfrac{2^n-1-\sum_{t=1}^n\dfrac 1t\dbinom nt}{n(n-1)}\)。那个和式是 A103213 除掉阶乘,可以递推计算。

点击查看代码
//P6108
#include <bits/stdc++.h>
using namespace std; typedef long long ll;
void solve();int main(){ solve(); return 0; }

const int N = 5e6 + 10;
const ll P = 998244353;
int n, m;
ll pw2[N], fg[N], fac[N], inv[N], vg[N];
struct node{
	int sum, len, pw, tag;
} t[N*4];

ll qp(ll x, ll y){
	ll ans = 1;
	while(y){
		if(y & 1){
			ans = ans * x % P;
		}
		x = x * x % P;
		y >>= 1;
	}
	return ans;
}

void build(int p, int l, int r){
	t[p].len = r - l + 1;
	if(l != r){
		int mid = l + r >> 1;
		build(p<<1, l, mid);
		build(p<<1|1, mid+1, r);
	}
}
void psd(int p, ll v){
	t[p].tag = ((ll)t[p].tag + v) % P;
	t[p].pw = ((ll)t[p].pw + 2ll * t[p].sum * v) % P;
	t[p].pw = ((ll)t[p].pw + v * v % P * t[p].len) % P;
	t[p].sum = ((ll)t[p].sum + t[p].len * v) % P;
}
void add(int p, int l, int r, int ql, int qr, ll v){
	if(qr < l || r < ql){
		return;
	} else if(ql <= l && r <= qr){
		psd(p, v);
	} else {
		int mid = l + r >> 1;
		psd(p<<1, t[p].tag);
		psd(p<<1|1, t[p].tag);
		t[p].tag = 0;
		add(p<<1, l, mid, ql, qr, v);
		add(p<<1|1, mid+1, r, ql, qr, v);
		t[p].sum = ((ll)t[p<<1].sum + t[p<<1|1].sum) % P;
		t[p].pw = ((ll)t[p<<1].pw + t[p<<1|1].pw) % P;
	}
}
pair<ll, ll> qry(int p, int l, int r, int ql, int qr){
	if(qr < l || r < ql){
		return make_pair(0, 0);
	} else if(ql <= l && r <= qr){
		return make_pair(t[p].sum, t[p].pw);
	} else {
		int mid = l + r >> 1;
		psd(p<<1, t[p].tag);
		psd(p<<1|1, t[p].tag);
		t[p].tag = 0;
		pair<ll, ll> x = qry(p<<1, l, mid, ql, qr);
		pair<ll, ll> y = qry(p<<1|1, mid+1, r, ql, qr);
		x.first = (x.first + y.first) % P;
		x.second = (x.second + y.second) % P;
		return x;
	}
}

void solve(){
	scanf("%d%d", &n, &m);
	build(1, 1, n);
	pw2[0] = fac[0] = 1;
	fg[1] = 1, fg[2] = 5, fg[3] = 29, fg[4] = 206;
	for(int i = 1; i <= n; ++ i){
		pw2[i] = pw2[i-1] * 2 % P;
		fac[i] = fac[i-1] * i % P;
		fg[i+4] = 2ll * (i+3) * (i+2) % P * (i+2) % P * fg[i+1] % P;
		fg[i+4] += (P-1) * (i+3) % P * (13+i*5) % P * fg[i+2] % P;
		fg[i+4] += (13+i*4) * fg[i+3] % P;
		fg[i+4] %= P;
		vg[i] = qp((ll)i * (i-1) % P, P-2);
	}
	inv[n] = qp(fac[n], P-2);
	for(int i = n-1; i >= 0; -- i){
		inv[i] = inv[i+1] * (i+1) % P;
	}
	for(int i = 1; i <= m; ++ i){
		int op, l, r;
		scanf("%d%d%d", &op, &l, &r);
		if(op == 1){
			ll a;
			scanf("%lld", &a);
			add(1, 1, n, l, r, a);
		} else {
			auto tmp = qry(1, 1, n, l, r);
			ll len = r - l + 1;
			ll vx = len * tmp.second % P;
			vx = (vx - tmp.first * tmp.first % P + P) % P;
			ll vy = (pw2[len] - 1 - inv[len] * fg[len] % P + P + P) % P * vg[len] % P;
			printf("%lld\n", vx * vy % P);
		}
	}
}

标签:2024.06,dbinom,别急,记录,int,dfrac,sum,ans,ll
From: https://www.cnblogs.com/KiharaTouma/p/18252177/2024-06

相关文章

  • STM学习记录(六)————串口的发送接收
    文章目录前言一、串口结构体及库函数二、实现串口发送(库函数)1.程序设计2.代码三.串口接收1.串口接收(普通)2.串口中断接收3.串口发送字符串函数4.串口实现printf(重定向)5.串口实现scanf(重定向)前言一个学习单片机的小白~有错误评论区或私信指出~一、串口结构体及......
  • usb gadget配置记录
    linux配置DeviceDrivers>Networkdevicesupport>USBNetworkAdapters[*]Multi-purposeUSBNetworkingFramework[*]SimpleUSBNetworkLinks(CDCEthernetsubset)DeviceDrivers>USBsupport>USBGadgetSupport[*]Ser......
  • Git学习记录v1.0
    1、常用操作gitclonegitconfiggitbranchgittcheckoutgitstatusgitaddgitcommitgitpushgitpullgitloggittag1.1gitclone从git服务器拉取代码gitclonehttps://gitee.com/xxx/studyJava.git1.2gitconfig配置开发者用户名和邮箱gitconfiguser.......
  • 帮猪猪修修改的代码2016年的代码记录
    这是一个图片轮播的代码,但是它们的是css动画,当时代码运行不了,我花了二天才修改,现在记录一下,凭回忆用。<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>网易科技</title><metaname="viewport"content="width=de......
  • 代码随想录刷题记录(7)| 字符串(344.反转字符串,541. 反转字符串II,卡码网:54.替换数字)
    目录(一)反转字符串1.题目描述2.思路3.解题过程(二)反转字符串Ⅱ1.题目描述2.思路3.解题过程(三)替换数字1.题目描述2.思路3.解题过程(一)反转字符串344.反转字符串-力扣(LeetCode)1.题目描述        编写一个函数,其作用是将输入的字符串反转过......
  • 代码随想录刷题记录(8)| 字符串(151.反转字符串里的单词,卡码网:55.右旋转字符串,28. 找出字
    目录(四)反转字符串里的单词1. 题目描述2.思路3.解题过程(1)使用额外空间存储(2)原地反转 (五)右旋转字符串1.题目描述2.思路3.解题过程 (六)找出字符串中第一个匹配项的下标1.题目描述2.思路3.解题思路(七)重复的子字符串1.题目描述2.思路3.解题过程(八)......
  • 题解 | #查找薪水记录超过15条的员工号以及其记录次数t#
    高德Java后端一面(秒挂)百度算法岗面经上海网易互娱游戏策划sp一二三面面经(已OC)网易互娱/阿里互娱游戏策划一面面经【网易互娱】游戏设计师校招实习面试(已OC)[已oc]网易互娱游戏设计师(系统关卡数值)面经[已oc]网易互娱游戏设计师(系统关卡数值)面经网易互娱游戏设计师(系统......
  • 记录一次curl错误的经历(没找到具体的原因)
    起因:在开发环境的a项目中,curl请求一个第三方接口失败,查了一会没找到原因就没管了,此时知道的信息就是:curl_curl_exec返回null,curl_error返回空字符串。后面发现每个第三方接口都失败,直接在服务器上curl就是成功的,我试着在代码里curl我们自己的官网首页,curl还是失败但信息和之前的......
  • ATcoder ABC 358 补题记录(A~D,G)
    A直接模拟即可。#pragmaGCCoptimize(3)#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=1000100,mod=998244353;inta[N];signedmain(){strings,t;cin>>s>>t;if(s=="AtCoder"&&t==&qu......
  • CLFS驱动程序(clfs.sys)是Windows操作系统中的一个组件,它提供了日志记录和恢复功能,以增
    clfs.sys是Windows操作系统中的一个系统文件,它是CLFS(CommonLogFileSystem)驱动程序的一部分。CLFS是Windows操作系统中用于管理日志文件的文件系统,它提供了日志记录和恢复功能。CLFS驱动程序(clfs.sys)具有以下功能和作用:日志记录:CLFS可以记录系统的操作、事件和错误等信息到......