YbtOJ-序列计数【组合数学,莫队】

正题


题目大意

求有多少个长度在l,rl,rl,r之间,值域是[1,n][1,n][1,n]的严格上升子序列

1≤T,n≤105,1≤l≤r≤1051\leq T,n\leq 10^5,1\leq l\leq r\leq 10^51T,n105,1lr105


解题思路

先转换成两个前缀和的差,那么相当于我们要快速求
∑i=0m(ni)\sum_{i=0}^m\binom{n}{i}i=0m(in)
的值。

考虑到我们有组合数恒等式(nm)=(n−1m−1)+(n−1m)\binom n m=\binom{n-1}{m-1}+\binom{n-1}{m}(mn)=(m1n1)+(mn1)

如果我们知道了F(n,m)=∑i=0m(ni)F(n,m)=\sum_{i=0}^m\binom{n}{i}F(n,m)=i=0m(in),那么有F(n+1,m)=2F(n,m)−(nm)F(n+1,m)=2F(n,m)-\binom{n}{m}F(n+1,m)=2F(n,m)(mn)(也就是相当于复制一份左移一位相加)。

然后F(n,m)F(n,m)F(n,m)都可以O(1)O(1)O(1)移动n,mn,mn,m了,直接上莫队。

时间复杂度:O(nn)O(n\sqrt n)O(nn)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=5e5+10,P=998244353,T=500;
struct node{ll id,r,x;
}a[N];
ll n,m,fac[N],inv[N],ans[N];
ll C(ll n,ll m)
{return fac[n]*inv[m]%P*inv[n-m]%P;}
bool cmp(node x,node y){if(x.x/T==y.x/T)return x.r<y.r;return x.x/T<y.x/T;
}
signed main()
{freopen("sequence.in","r",stdin);freopen("sequence.out","w",stdout);inv[0]=inv[1]=fac[0]=1;for(ll i=2;i<N;i++)inv[i]=P-inv[P%i]*(P/i)%P;for(ll i=1;i<N;i++)fac[i]=fac[i-1]*i%P,inv[i]=inv[i-1]*inv[i]%P;scanf("%lld",&m);for(ll i=1;i<=m;i++){ll l,r,x;scanf("%lld%lld%lld",&l,&r,&x);a[++n]=(node){i,r,x};a[++n]=(node){-i,l-1,x};}sort(a+1,a+1+n,cmp);ll x=0,r=0,sum=1;for(ll i=1;i<=n;i++){while(x<a[i].x)sum=(sum*2ll-C(x,r))%P,x++;while(x>a[i].x)x--,sum=(P+1)/2*(sum+C(x,r))%P;while(r<a[i].r)r++,(sum+=C(x,r))%=P;while(r>a[i].r)(sum-=C(x,r))%=P,r--;(ans[abs(a[i].id)]+=sum*(a[i].id/abs(a[i].id))%P)%=P;}for(ll i=1;i<=m;i++)printf("%lld\n",(ans[i]+P)%P);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

欧拉筛法的应用

[数论]-----欧拉筛法的应用 文章目录1.求1~n之间的所有质数2.求1~n之间所有自然数的欧拉函数φ&#xff08;x&#xff09;3.求1~n之间的每个数的因子个数详细推导&#xff1a;代码&#xff1a;4.求1~n之间每个数的因数和详细的推导&#xff1a;代码&#xff1a;筛法求莫比乌斯函…

P5787 二分图 /【模板】线段树分治(线段树分治、并查集)

关于什么是合理的实现 解析 本题把并查集写在了题面上 然而&#xff0c;我却一直沉浸在一个及其通用的判断二分图的方法中&#xff1a; 一个图是二分图的充要条件是它没有奇环 怎么维护这个玩意&#xff1f;带权并查集&#xff01; 怎么套线段树分治&#xff1f;可持久化&…

全新尝试|ComponentOne WinForm和.NET Core 3.0

在微软 Build 2018 开发者大会上&#xff0c;.NET 团队公布了 .NET Core 的下一个主要版本 .NET Core 3.0 的规划蓝图&#xff1a;.NET Core 3将开始支持 Windows 桌面应用程序&#xff0c;包括 Windows Form、Windows Presentation Framework&#xff08;WPF&#xff09;和UWP…

[bzoj3625][Codeforces Round #250]小朋友和二叉树 (生成函数)

description 我们的小朋友很喜欢计算机科学&#xff0c;而且尤其喜欢二叉树。 考虑一个含有n个互异正整数的序列c[1],c[2],…,c[n]。如果一棵带点权的有根二叉树满足其所有顶点的权值都在集合{c[1],c[2],…,c[n]}中&#xff0c;我们的小朋友就会将其称作神犇的。并且他认为&am…

11.9模拟:总结

140pts 30100100 qwq 昨天有点被“写完这题就睡”坑到 所以今天状态不太好&#xff1f; 努力给自己找理由.jpg 最大的损失应该就是T1被降智了吧 那其实才是本场最水的一题 看到1e18的数据范围应该刻意往矩乘上想一想的 但我出门就走错了路 利用杨辉三角推了个大式子 从推出那个…

H - Tunnel Warfare HDU - 1540

H - Tunnel Warfare HDU - 1540 题意&#xff1a; n个数顺序排列&#xff0c;左右数相连&#xff0c; 现在有三个操作&#xff1a; 1.摧毁一个位置上的数 2.回复上一次摧毁的数 3.查询包含该位置的最长连续区间长度 题解&#xff1a; 有两个方法&#xff0c;第一个是区间的…

CF802C-Heidi and Library(hard)【费用流】

正题 题目链接:https://www.luogu.com.cn/problem/CF802C 题目大意 你有一个可以放kkk本书的书架&#xff0c;第iii天要求书架上有第aia_iai​种书&#xff0c;购买第iii种书的价格为cic_ici​。 求满足nnn天要求的最小花费。 1≤n,k≤80,1≤ci≤1061\leq n,k\leq 80,1\leq …

2019年1月已到,Java 8 要收费了吗?

根据此前开源中国发起的 Java 版本使用调查&#xff0c;国内的 Java 主力版本仍是 Java 8&#xff0c;有近 70% 的用户表示仍在使用 Java 8。所以对于「Java 8 是否要收费」这个问题&#xff0c;十分有必要阐述清楚&#xff0c;以消除不必要的恐慌。首先要明确一点&#xff0c;…

[NOI2007] 货币兑换 (dp+李超树维护凸包)

description 小Y最近在一家金券交易所工作。该金券交易所只发行交易两种金券&#xff1a;A纪念券&#xff08;以下简称A券&#xff09;和 B纪念券&#xff08;以下简称B券&#xff09;。每个持有金券的顾客都有一个自己的帐户。金券的数目可以是一个实数。每天随着市场的起伏波…

CF1379F1 Chess Strikes Back (easy version)(鸽笼原理、线段树)

解析 很神奇的一道题 关键在于把22的正方形看成一个单位的转化 由于每个22最多有一个国王 因此每个2*2都一定有一个国王 这是本题的关键 个人感觉这个思想很像鸽笼原理 至于后面的线段树就水到渠成了 代码 #include<bits/stdc.h> using namespace std; #define ll l…

[ZJOI2008]树的统计

[ZJOI2008]树的统计 题意&#xff1a; 题解&#xff1a; 树链剖分模板题&#xff0c;好久没打都忘了 代码&#xff1a; #include <algorithm> #include <cstdio> #include <cstring> #define lc o << 1 #define rc o << 1 | 1 const int max…

AT3860-[AGC020F]Arcs on a Circle【dp】

正题 题目链接:https://www.luogu.com.cn/problem/AT3860 题目大意 有一个周长为mmm的圆&#xff0c;nnn条线段&#xff0c;第iii条长度为aia_iai​&#xff0c;将线段贴在圆的随机位置上&#xff0c;求整个圆都被覆盖的概率。 1≤n≤6,1≤m≤501\leq n\leq 6,1\leq m\le 501…

带你学习AOP框架之Aspect.Core[1]

在软件业&#xff0c;AOP为Aspect Oriented Programming的缩写&#xff0c;意为&#xff1a;面向切面编程&#xff0c;通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续&#xff0c;是软件开发中的一个热点&#xff0c;是函数式编程的一种衍生…

「雅礼集训 2017 Day7」事情的相似度(后缀自动机+LCT+树状数组)

description 点击查看题目内容 solution Step1 无脑建SAMSAMSAM 两个前缀的最长公共后缀就是parent−treeparent-treeparent−tree上两点的lcalcalca&#xff0c;定义知显然 Step2 离线询问&#xff0c;按右端点从小到大排序 Step3 每加入一个字母&#xff0c;就将tatata在p…

CF1396B Stoned Game(博弈论)

解析 上午模拟被博弈论虐&#xff0c;下午被黄色的博弈论虐 qwq 首先的一个结论是&#xff1a; 如果有一堆超过总体的一半&#xff0c;那么先手只需要守住这堆就稳赢了 如果没有这样的一堆&#xff0c;可以证明&#xff0c;最后一定可以全部拿完 假设最后有一堆k没拿完&…

主席树

大一寒假的时候学了主席树&#xff0c;当时还录了视频发b站上&#xff0c;过了好久没用都忘了差不多 这篇文章讲的非常详细&#xff0c;我就直接借用过来 静态主席树 总结一下就是&#xff1a; 代码&#xff1a; 对于每一种状态建立一个线段树&#xff0c;为了防止mle&#xf…

P7735-[NOI2021]轻重边【树链剖分,线段树】

前言 之前线上赛就A的题现在才写博客 正题 题目链接:https://www.luogu.com.cn/problem/P7735 题目大意 有nnn个点的一棵树&#xff0c;开始所有边都是轻边&#xff0c;mmm次操作。 把x→yx\rightarrow yx→y路径上所有点连接的重边都变为轻边&#xff0c;然后再把路径上的…

.NET Core实战项目之CMS 第十六章 用户登录及验证码功能实现

前面为了方便我们只是简单实现了基本业务功能的增删改查&#xff0c;但是登录功能还没有实现&#xff0c;而登录又是系统所必须的&#xff0c;得益于 ASP.NET Core的可扩展性因此我们很容易实现我们的登录功能。今天我将带着大家一起来实现下我们的ASP.NET Core2.2开发的CMS系统…

CF508D Tanya and Password(欧拉回路)

解析 之前模拟考过的一道题 把字符串当成前后缀之间的连边即可 注意即使图的度数符合要求&#xff0c;也可能由于不连通而无解&#xff0c;需要再特判一下 #include<bits/stdc.h> using namespace std; #define ll long long #define ull unsigned long long const int…

[HEOI2016/TJOI2016]字符串 (后缀数组+主席树+二分)

description 佳媛姐姐过生日的时候&#xff0c;她的小伙伴从某东上买了一个生日礼物。生日礼物放在一个神奇的箱子中。箱子外边写了一个长为 n 的字符串 s&#xff0c;和 m 个问题。佳媛姐姐必须正确回答这 m 个问题&#xff0c;才能打开箱子拿到礼物&#xff0c;升职加薪&…