牛客练习赛46 E 华华和奕奕学物理 (树状数组)
https://ac.nowcoder.com/acm/contest/894/E
一开始写了一个简单的模拟 通过率只有5%......
看题解真的理解了好久!!肥宅大哭orz
题解如下

最后一句:“维护6个树状数组即可”.....喵喵喵??
先学一下树状数组吧:
链接在这
https://blog.csdn.net/Small_Orange_glory/article/details/81290634
结合代码讲比较容易理解
#include<bits/stdc++.h>
using namespace std;
const int maxn=4e6+;
const int T=3e5+;
const int mod=1e9+;
const int g=;
#define ll long long
ll bit[][maxn];
void add(ll b[],int i,ll C) //更新树状数组
{
while(i<maxn)
{
b[i]=(b[i]+C)%mod;
i+=i&-i;
}
}
ll sum(ll b[],int i) //求和 前i个元素的和
{
ll ans=;
while(i>)
{
ans+=b[i];
i-=i&-i;
}
return ans%mod;
}
int main()
{
int Q;scanf("%d",&Q);
while(Q--)
{
int op,v,t,m;scanf("%d%d%d",&op,&v,&t);
if(op==)
{
int V=v+g*(T-t);
scanf("%d",&m);
add(bit[],V,1LL*m*v%mod*v%mod);
add(bit[],V,1LL*m*g*g%mod);
add(bit[],V,1LL*m*g*g%mod*t%mod*t%mod);
add(bit[],V,1LL**m*g*g%mod*t%mod);
add(bit[],V,1LL**m*v%mod*g%mod);
add(bit[],V,1LL**m*v%mod*g*t%mod);
}
else
{
int V=min(v+g*(T-t),maxn-);
ll ans=;
ans+=sum(bit[],V);
ans+=sum(bit[],V)*t%mod*t%mod;
ans+=sum(bit[],V);
ans-=sum(bit[],V)*t%mod;
ans+=sum(bit[],V)*t%mod;
ans-=sum(bit[],V);
ans%=mod;
if(ans<)
ans+=mod;
printf("%lld\n",ans);
}
}
return ;
}
先讲为什么维护6个数组:
因为将公式

拆开就会变成含有6项的多项式:

我们将符合条件的小球的分别记录到6个数组中 这样方便求和
那么什么是符合条件的小球呢?
仔细看题解里说:
若某一时刻a球比b球速度快,则a球始终比b球速度快。
所以如果末尾时间a球比b球快 那么a球始终比b球快
所以判断某一时刻速度比v小的小球有哪些 假设在这一时刻扔下一个初速度为v的小球 只需要看哪些小球在最后的时刻速度比这个初速度为v的小球速度慢就好了
那么对于每一次op==1 我们就更新一次数组 把v+g*(T-t)之后的树状数组全部更新
对于每一次op==2 我们就把前v+g*(T-t)项求和
照着模拟几遍就理解了(而我想了一晚上)
牛客练习赛46 E 华华和奕奕学物理 (树状数组)的更多相关文章
- 牛客练习赛7 E 珂朵莉的数列(树状数组+爆long long解决方法)
https://www.nowcoder.com/acm/contest/38/E 题意: 思路: 树状数组维护.从大佬那里学习了如何处理爆long long的方法. #include<iost ...
- 牛客练习赛22-E.简单数据结构1(扩展欧拉定理降幂 +树状数组)
链接:E.简单数据结构1 题意: 给一个长为n的序列,m次操作,每次操作: 1.区间加 2.对于区间,查询 ,一直到- 请注意每次的模数不同. 题解:扩展欧拉定理降幂 对一个数p取log(p)次的 ...
- 牛客网多校第5场 H subseq 【树状数组+离散化】
题目:戳这里 学习博客:戳这里 题意:给n个数为a1~an,找到字典序第k小的序列,输出该序列所有数所在位置. 解题思路:先把所有序列预处理出来,方法是设一个数组为dp,dp[i]表示以i为开头的序列 ...
- 牛客网多校第5场 I vcd 【树状数组+离散化处理】【非原创】
题目:戳这里 学习博客:戳这里 作者:阿狸是狐狸啦 n个点,一个点集S是好的,当且仅当对于他的每个子集T,存在一个右边无限延长的矩形,使的这个矩形包含了T,但是和S-T没有交集. 求有多少个这种集合. ...
- 牛客练习赛46 C 华华跟奕奕玩游戏 (期望,概率)(详解)
链接:https://ac.nowcoder.com/acm/contest/894/C 来源:牛客网 华华跟奕奕玩游戏 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K ...
- 牛客练习赛46 B 华华送奕奕小礼物 (预处理前缀和,二分)
链接:https://ac.nowcoder.com/acm/contest/894/B?&headNav=acm 来源:牛客网 华华送奕奕小礼物 时间限制:C/C++ 1秒,其他语言2秒 空 ...
- 牛客练习赛46 A 华华教奕奕写几何 (简单数学)
链接:https://ac.nowcoder.com/acm/contest/894/A 来源:牛客网 华华教奕奕写几何 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K ...
- 牛客练习赛53 E-老瞎眼pk小鲜肉(思维+线段树+离线)
前言 听说是线段树离线查询?? 做题做着做着慢慢对离线操作有点感觉了,不过也还没参透,等再做些题目再来讨论离线.在线操作. 这题赛后看代码发现有人用的树状数组,$tql$.当然能用树状数组写的线段树也 ...
- 牛客练习赛31A 地、颜色、魔法(搜索+二维数组一维表示)
红色来源于山脉,象征着狂躁.愤怒.混乱,血雨腥风,电光火石. 蓝色来源于海岛,象征着控制.幻觉.诡计,运筹帷幄,谋定后动. 绿色来源于树林,象征着生命.蛮力.成长,横冲直撞,生生不息. 黑色来源于沼泽 ...
随机推荐
- 【长郡NOIP2014模拟10.22】搞笑的代码
题目 在OI界存在着一位传奇选手--QQ,他总是以风格迥异的搞笑代码受世人围观 某次某道题目的输入是一个排列,他使用了以下伪代码来生成数据 while 序列长度<n do { 随机生成一个整数属 ...
- package.json文件
http://javascript.ruanyifeng.com/nodejs/packagejson.html#toc7(copy) 通常我们使用npm init命令来创建一个npm程序时,会自动生 ...
- sh_02_快速体验
sh_02_快速体验 import sh_01_九九乘法表 sh_01_九九乘法表.multiple_table()
- 容器适配器————stack
只能访问 stack 顶部的元素:只有在移除 stack 顶部的元素后,才能访问下方的元素. 堆栈操作 top():返回一个栈顶元素的引用,类型为 T&.如果栈为空,返回值未定义. push( ...
- CUDA开发指南
安装指南:https://blog.csdn.net/qilixuening/article/details/77503631 安装了anaconda不需要安装cuda和cudnn?:https:// ...
- 苹果cms怎么上传本地视频资源
今天我们来简单分享下苹果cms怎么上传本地视频,采集资源站的资源我们已经熟知了,但是有的伙伴们想要上传自己制作或是录制的视频应该怎么操作呢?这个问题有多种方法,今天我们先简单的说2种方法. 一,上传到 ...
- Vim 命令、操作、快捷键(收藏大全)
------ 命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filenam ...
- vsCode格式化插件
ESlint:是用来统一JavaScript代码风格的工具,不包含css.html等. 背景 近来研究前端,然后一直在百度上找VScode格式化(ESlint)的插件,结果找了半天都不靠谱.目前没有一 ...
- hbuilderx 连接模拟器
打开cmd,找到bin的安装目录(G:\Program Files\Nox\bin) cd进入夜神模拟器bin目录 执行以下命令 nox_adb connect 127.0.0.1:620 ...
- python之random随机函数
random.random()用于生成 用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限.如果a > b,则生成随机数 1 n: a <= n <= b.如果 ...