牛客练习赛25 C 再编号
解题思路
我们先来观察一下题目中给出的公式
$$a'_i=(\sum_{j=1}^na_j)-a_i$$
通过这个公式推一下经过再编号后的序列的总和,因为我们推出这个和之后可以进行下一次计算。
$$\sum_{i=1}^na'_i=\sum_{i=1}^n((\sum_{j=1}^na_j)-a_i)$$
变形一下
$$\sum_{i=1}^na'_i=n\times (\sum_{j=1}^na_j)-\sum_{i=1}^na_i$$
$$\sum_{i=1}^na'_i=(n-1)\times \sum_{i=1}^na_i$$
emmmm,这个结论貌似很有用的样子,我们可以通过上面的推导预处理处每一次变化后整个序列的总和。
在观察一下原来的序列,每一次再编号他们的每个数和第一个数的差的绝对值是不变的。并且在奇数次的变化后为$a_1-a_j$,偶数次变化后是$a_j-a_1$。
既然是这样子,那我们就可以再通过之前预处理的总和在处理出每一次改变后的第一个值。通过这个值我们可以$O(1)$的对每一个位置上的数值进行询问。
这样的话总时间复杂度是$O(t)$的
代码看这里
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <queue>
#include <vector>
using namespace std;
#define LL long long
#define mod int(1e9+7)
LL a[],n,m,sum[];
LL ans[][],num;
int main()
{
LL x,t;
scanf("%lld%lld%lld",&n,&m,&a[]);
num=a[];
for(int i=;i<=n;i++)
{
scanf("%lld",&a[i]);
num+=a[i];
sum[i]=a[]-a[i];
}
ans[][]=a[];
for(int i=;i<=;i++)
{
ans[i][]=((num-a[])+*mod)%mod;
a[]=ans[i][];
num=(num*(n-))%mod;
}
for(int i=;i<=m;i++)
{
scanf("%lld%lld",&x,&t);
if(t%!=)printf("%lld\n",(ans[t][]+sum[x]+mod)%mod);
else printf("%lld\n",(ans[t][]-sum[x]+mod)%mod);
}
}
牛客练习赛25 C 再编号的更多相关文章
- 牛客网练习赛25 C 再编号
链接:https://www.nowcoder.com/acm/contest/158/C来源:牛客网 定义对 a 的再编号为 a' ,满足 . 现在有 m 次询问,每次给定 x,t ,表示询问经过 ...
- 【牛客练习赛 25】A 因数个数和
题目地址:https://www.nowcoder.com/acm/contest/158/A 参考博客:https://blog.csdn.net/zzcblogs/article/details/ ...
- E 定向 牛客练习赛25
tarjan 父节点和子节点 #include <cstdio> #include <cstdlib> #include <cmath> #include < ...
- 牛客练习赛25 A 因数个数和(数论分块)
题意: q次询问,每次给一个x,问1到x的因数个数的和. 1<=q<=10 ,1<= x<=10^9 1s 思路: 对1~n中的每个数i,i作为i,2i,3i,...的约数,一 ...
- 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B
牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...
- 最小生成树--牛客练习赛43-C
牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...
- 牛客练习赛48 C 小w的糖果 (数学,多项式,差分)
牛客练习赛48 C 小w的糖果 (数学,多项式) 链接:https://ac.nowcoder.com/acm/contest/923/C来源:牛客网 题目描述 小w和他的两位队友teito.toki ...
- 牛客练习赛42 C 出题的诀窍 (贡献,卡常)
牛客练习赛42 C 出题的诀窍 链接:https://ac.nowcoder.com/acm/contest/393/C来源:牛客网 题目描述 给定m个长为n的序列a1,a2,-,ama_1 , a_ ...
- 牛客练习赛52 | C | [烹饪] (DP,裴蜀定理,gcd)
牛客练习赛52 C 烹饪 链接:https://ac.nowcoder.com/acm/contest/1084/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 327 ...
随机推荐
- 容器LinkedList原理(学习)
一.概述 数据结构和ArrayList有本质不同,LinkedList 是基于链表实现,它的插入和删除操作比 ArrayList 更加高效,基于链表的,所以随机访问的效率要比 ArrayList 差. ...
- hdu 6035(树形dp)
题意:给你棵树,树上每个节点都有颜色,每条路径上有m种颜色 问你所有路径上出现的颜色的和 思路:答案求的是每种颜色对路径的贡献 我们可以反过来每种颜色不经过的路径的条数 假设根节点的颜色为x 我 ...
- python-----自动解压并删除zip文件
如何自动解压并删除zip? 如何解压 → 使用内置模块来实现(shutil.unpack_archive) 如何删除zip → 使用内置模块os来实现(os.remove) 如何监测zip的出 ...
- 洛谷 P3960 [ NOIP 2017 ] 列队 —— 线段树
题目:https://www.luogu.org/problemnew/show/P3960 NOIP 题,不用很复杂的数据结构...但又参考了许多: 要求支持维护删除第 k 个和在末尾插入的数据结构 ...
- end()与andSelf()
end() 回到最近的一个"破坏性"操作之前.即,将匹配的元素列表变为前一次的状态. 如 果之前没有破坏性操作,则返回一个空集.所谓的"破坏性"就是指任何改变所 ...
- Linux 系统命令 - pwd - 显示当前所在的位置
命令详解 重要星级: ★★★★★ 功能说明: pwd命令是 "print working directory" 中每个单词的首字母缩写,其功能是显示当前工作目录的绝对路径.在实际工 ...
- E20180127-hm
retain vt. 保持; 留在心中,记住; 雇用; 付定金保留;
- [Swift通天遁地]一、超级工具-(6)通过JavaScript(脚本)代码调用设备的源生程序
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- python之类的继承及方法讲解分析
#!/usr/bin/env python#-*- conding:utf-8 -*- # class Person(object):# def __init__(self,name,age):# s ...
- javascript检测基本类型值或引用类型值的类型方法
首先javascript的数据类型分为两种数据类型:基本数据数据类型和引用数据类型 基本数据类型:Number,String,Boolean,Undefined,Null.原始值,是简单的数据段,可按 ...