牛客多校10 D Rikka with Prefix Sum 不是数据结构
https://www.nowcoder.com/acm/contest/148/D
题意:
1e5个数,1e5个操作,操作分为:
1、区间加。
2、整个数列替换为前缀和。
3、区间查询。 查询数小于500.
题解:比赛时的思路是:(基本正确,没能实现)
1.对于某个操作1,记录下其之后操作2的个数,就可以通过组合数O(1)算出该区间的每个数最终的结果。
2.各个操作1相互独立,分开来算,最后相加。(暴力出来的规律)
没想到的两点:
1.可以通过组合数O(1)算出区间和:用公式
之前碰到过,杨辉三角上很明显。但直接导致我认为这个想法还是O(n*n/2)orz。
2.考虑某次区间加之后,操作2对该区间后面的数的影响:可以认为l~n加了v,r+1到n加了-v 正好抵消
另外:尝试了快速mod模板
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<cmath>
- #include<cstring>
- #include<queue>
- #include<map>
- #include<string>
- #include<bitset>
- #define re register
- #define rep(i,s,t) for(re int i=s;i<=t;++i)
- #define per(i,s,t) for(re int i=s;i>=t;--i)
- #define mmm(f,x) memset(f,x,sizeof f)
- //#define x first
- //#define xx second
- using namespace std;
- typedef long long ll;
- const ll mod = ;
- template<typename T>inline void add_(T &A, int B, ll MOD = mod) { A += B; (A >= MOD) && (A -= MOD); }
- template<typename T>inline void mul_(T &A, ll B, ll MOD = mod) { A = (A*B) % MOD; }
- template<typename T>inline void mod_(T &A, ll MOD = mod) { A %= MOD; A += MOD; A %= MOD; }
- const int maxn = 3e5 + ;
- int a[maxn];
- int n, m;
- int tot,Q;
- ll L[maxn], R[maxn],W[maxn],num2[maxn];
- ll inv[maxn], fac[maxn];
- ll c[maxn];
- long long kpow(long long a, long long n) {
- long long res = ;
- while (n > ) {
- if (n & )res = res * a%mod;
- a = a * a%mod;
- n >>= ;
- }
- return res;
- }
- void init() {
- fac[] = fac[] = ;
- inv[] = ;
- rep(i, , maxn) {
- fac[i] = fac[i - ] * (ll)i % mod;
- inv[i] = kpow(fac[i], mod - );
- }
- }
- ll C(int n, int m) {
- if (n < m) return 0ll;
- if (m == || n == m) return 1ll;
- if (n - == m || m == ) return n;
- return fac[n] * inv[m] % mod * inv[n - m] % mod;
- }
- ll Csum(ll l, ll r, ll v, ll q) {
- if (l>r)return ;
- ll n = r - l + ;
- ll ans = v;
- mul_(ans,C(q + n - , q));
- mod_(ans);
- return ans;
- }
- ll query(int x) {
- ll ret = ;
- rep(i, , tot) {
- int q = Q - num2[i] + ;
- if (L[i] > x)continue;
- if (R[i] <= x) {
- add_(ret, Csum(L[i], x, W[i], q));
- add_(ret, Csum(R[i] + , x, -W[i], q));
- mod_(ret);
- }
- else add_(ret, Csum(L[i], x, W[i], q));
- }
- return ret;
- }
- int main() {
- init();
- int t;
- cin >> t;
- while (t--) {
- tot = ,Q=;
- cin >> n >> m;
- rep(i, , m) {
- int op;
- scanf("%d", &op);
- if (op == ) {
- Q++;
- }
- else {
- ll l, r;
- scanf("%lld%lld", &l, &r);
- if (op == ) {
- ll w;
- scanf("%lld", &w);
- L[++tot] = l, R[tot] = r; W[tot] = w;
- num2[tot] = Q;
- }
- else { cout<< (query(r) - query(l - ) + mod) % mod << endl; }
- }
- }
- }
- }
- /*
- 1
- 100000 7
- 1 1 3 1
- 2
- 3 2333 6666
- 2
- 3 2333 6666
- 2
- 3 2333 6666
- */
牛客多校10 D Rikka with Prefix Sum 不是数据结构的更多相关文章
- 牛客多校第十场 A Rikka with Lowbit 线段树
链接:https://www.nowcoder.com/acm/contest/148/A来源:牛客网 题目描述 Today, Rikka is going to learn how to use B ...
- 牛客网暑期ACM多校训练营(第十场)D Rikka with Prefix Sum (数学)
Rikka with Prefix Sum 题意: 给出一个数组a,一开始全为0,现在有三种操作: 1. 1 L R W,让区间[L,R]里面的数全都加上W: 2. 2 将a数组变为其前缀 ...
- 2020牛客多校第八场K题
__int128(例题:2020牛客多校第八场K题) 题意: 有n道菜,第i道菜的利润为\(a_i\),且有\(b_i\)盘.你要按照下列要求给顾客上菜. 1.每位顾客至少有一道菜 2.给顾客上菜时, ...
- 2019牛客多校第一场 I Points Division(动态规划+线段树)
2019牛客多校第一场 I Points Division(动态规划+线段树) 传送门:https://ac.nowcoder.com/acm/contest/881/I 题意: 给你n个点,每个点有 ...
- 牛客多校第一场 B Inergratiion
牛客多校第一场 B Inergratiion 传送门:https://ac.nowcoder.com/acm/contest/881/B 题意: 给你一个 [求值为多少 题解: 根据线代的知识 我们可 ...
- 2019牛客多校第二场 A Eddy Walker(概率推公式)
2019牛客多校第二场 A Eddy Walker(概率推公式) 传送门:https://ac.nowcoder.com/acm/contest/882/A 题意: 给你一个长度为n的环,标号从0~n ...
- 牛客多校第三场 F Planting Trees
牛客多校第三场 F Planting Trees 题意: 求矩阵内最大值减最小值大于k的最大子矩阵的面积 题解: 矩阵压缩的技巧 因为对于我们有用的信息只有这个矩阵内的最大值和最小值 所以我们可以将一 ...
- 牛客多校第三场 G Removing Stones(分治+线段树)
牛客多校第三场 G Removing Stones(分治+线段树) 题意: 给你n个数,问你有多少个长度不小于2的连续子序列,使得其中最大元素不大于所有元素和的一半 题解: 分治+线段树 线段树维护最 ...
- 牛客多校第四场sequence C (线段树+单调栈)
牛客多校第四场sequence C (线段树+单调栈) 传送门:https://ac.nowcoder.com/acm/contest/884/C 题意: 求一个$\max {1 \leq l \le ...
随机推荐
- Django TemplateDoesNotExist
在联系Django的时候,启动正常,我在浏览器上输入URL地址后报错 TemplateDoesNotExist at /test/ 解决方案 默认这里是空的,这里我们填上我们静态文件的地址
- Ansible 使用普通用户远程执行playbook
设置ansible使用普通用户jsxge远程连接执行playbook 1. ansible控制端创建普通用户jsxgecd /homeuseradd jsxgechown -R jsxge.wheel ...
- php手册总结《类》
手册页面: http://php.net/manual/zh/language.oop5.basic.php >> 类名 类名可以是任何非 PHP 保留字的合法标签.一个合法类名以字母或下 ...
- [k8s]k8s配置nfs做后端存储&配置多nginx共享存储&&statefulset配置
所有节点安装nfs yum install nfs-utils rpcbind -y mkdir -p /ifs/kubernetes echo "/ifs/kubernetes 192.1 ...
- 【C语言】两个指针(地址)相减
两个指针相减,为两个指针之间间隔这两个指针类型的数目. 如:int *p,*q; p-q=(p地址-q地址)/sizeof(int) #include <stdio.h> int main ...
- 01——Introduction to Android介绍
Introduction to Android Android provides a rich application framework that allows you to build innov ...
- 【XMPP】基于XMPP的即时通讯解决方案
什么是XMPP 介绍XMPP之前,先来看看GTalk. GTalk是Google推出的IM(Instant Messaging,即时通讯)软件,类似于QQ和MSN. 从技术角度来说,GTalk与QQ和 ...
- django DateTimeField 时间格式化
['%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59' '%Y-%m-%d %H:%M', # '2006-10-25 14:30' '%Y-%m-%d', # ' ...
- CLOS架构是啥?
有多少种技术能够在六十五年后依旧能够熠熠生辉,在IT的基础架构中扮演着重要角色?CLOS架构应该算是一项.Clos架构,诞生于1952年,是由由贝尔实验室一位叫Charles Clos的人提出的.CL ...
- Python3数字(Number)
一.数学函数 二.随机数函数 三.三角函数 四.数学常量