[NOIP2018校模拟赛]T1聚会 party
题目链接:###
分析:###
设每个点到1号点的距离为dist_{i},每个点的权值为x_{i},目标点到1号点的距离为dist,权值为x,那么对于每一次查询,我们讨论三种情况:
① 目标家庭在区间左边(x<=l)
如图所示
这种情况下
ans=sum((dist_{i}-dist)*x_{i])
=sum(dist_{i]*x_{i}) - dist*sum(x_{i})
②目标家庭在区间右边(x>=r)
容易同理得到
ans= dist*sum(x_{i})-sum(dist_{i]*x_{i})
③目标家庭在区间中间(l<x<r)
将区间从目标家庭处分开,分别求左右子区间的ans1,ans2,过程同①,②
为了降低时间复杂度,每个点到1号点的距离,每个点的权值,以及前两项的乘积都用前缀和来存储,于是我们维护三个前缀和数组——代码中分别是dist,b,p,这样对于每次查询的时间复杂度是O(1)的,总时间复杂度为O(N)。
被坑到的点:
相减的时候可能出现负值,对应的余数也会变成负值,这时候加一个特判
if(ans<0)ans+=mod;
即可。(不加会见祖宗你信吗)
代码如下:
#include<bits/stdc++.h>
#define frog 19260817
using namespace std;
inline long long read(){
int cnt=0,f=1;char c;
c=getchar();
while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
while(isdigit(c)){cnt=cnt*10+c-'0';c=getchar();}
return cnt*f;
}
long long n,m,dist[200005],x=0,a,l,r;
long long p[200005],b[200005];
long long ans;
int main(){
n=read();m=read();
memset(dist,0,sizeof(dist));
memset(p,0,sizeof(p));
memset(b,0,sizeof(b));
for(register int i=2;i<=n;i++){
x=read();
dist[i]=(x+dist[i-1])%frog;
}
for(register int i=1;i<=n;i++){
x=read();
b[i]=(x+b[i-1])%frog;
p[i]=(p[i-1]+x*dist[i])%frog;
}
for(register int i=1;i<=m;i++){
a=read();l=read();r=read();
if(a<=l){
long long t1=(p[r]-p[l-1])%frog;
long long t2=((b[r]-b[l-1])*dist[a])%frog;
ans=(t1-t2)%frog;
}
if(a>=r){
long long t1=(p[r]-p[l-1])%frog;
long long t2=((b[r]-b[l-1])*dist[a])%frog;
ans=(t2-t1)%frog;
}
if(l<a&&a<r){
long long t1=(p[a]-p[l-1])%frog;
long long t2=((b[a]-b[l-1])*dist[a])%frog;
long long t3=(p[r]-p[a])%frog;
long long t4=((b[r]-b[a])*dist[a])%frog;
ans=((t2-t1+t3-t4)%frog)%frog;
}
if(ans<0)ans+=frog;
printf("%lld\n",ans);
}
return 0;
}
[NOIP2018校模拟赛]T1聚会 party的更多相关文章
- [NOIP2018校模拟赛]T1 阶乘
题目: 描述 有n个正整数a[i],设它们乘积为p,你可以给p乘上一个正整数q,使p*q刚好为正整数m的阶乘,求m的最小值. 输入 共两行. 第一行一个正整数n. 第二行n个正整数a[i]. 输出 共 ...
- [NOIP2018校模拟赛]T2矩阵分组 Matrix
题目链接: 矩阵分组 分析: 这道题求的是两部分极差当中大的那个的最小值.对于这种求最值的问题,我们很自然(其实并没有)地想到二分答案. 这个题有两个结论: (好像当时看出来了第一个?然后发现下面都不 ...
- 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解
今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...
- NOI.AC: NOIP2018 全国模拟赛习题练习
闲谈: 最后一个星期还是不浪了,做一下模拟赛(还是有点小虚) #30.candy 题目: 有一个人想买糖吃,有两家商店A,B,A商店中第i个糖果的愉悦度为Ai,B商店中第i个糖果的愉悦度为Bi 给出n ...
- 20180610模拟赛T1——脱离地牢
Description 在一个神秘的国度里,年轻的王子Paris与美丽的公主Helen在一起过着幸福的生活.他们都随身带有一块带磁性的阴阳魔法石,身居地狱的魔王Satan早就想着得到这两块石头了,只要 ...
- NOIP欢乐模拟赛 T1 解题报告
小澳的方阵 (matrix.cpp/c/pas) [题目描述] 小澳最近迷上了考古,他发现秦始皇的兵马俑布局十分有特点,热爱钻研的小澳打算在电脑上还原这个伟大的布局. 他努力钻研,发现秦始皇布置兵马俑 ...
- [模拟赛] T1 高级打字机
Description 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小 ...
- 【洛谷】NOIP2018原创模拟赛DAY1解题报告
点此进入比赛 T1:小凯的数字 题意:给定q个l,r,求l(l+1)(l+2)...(r-1)r模9的结果 很显然,这是道考验数(运)学(气)的题目 结论:输出\((l+r)*(r-l+1)\over ...
- 2019.2.25 模拟赛T1【集训队作业2018】小Z的礼物
T1: [集训队作业2018]小Z的礼物 我们发现我们要求的是覆盖所有集合里的元素的期望时间. 设\(t_{i,j}\)表示第一次覆盖第i行第j列的格子的时间,我们要求的是\(max\{ALL\}\) ...
随机推荐
- Python开发【深浅拷贝】
1.==与is a = [1,2] b = [1,2] a==b >>>True a is b >>>False 2.拷贝与非拷贝 拷贝:原则上就是把数据分离出来, ...
- mvc4中 @Url.Action 如何读取javascript变量的值
js中 function Search() { var businessDate = GetSelectedBusinessDate("#businessYear", ...
- SKStoreReviewController之程序内评价
在iOS 10.3出现之前,App实现评价方式一般有两种: (一)deep link调用.在app 链接地址后面拼上action=write-review这种方式可以实现程序内评价: (二)App跳转 ...
- passive aggressive(pa)和average perceptron(ap)
passive aggressive(pa)和average perceptron(ap)
- RabbitMQ使用简述
RabbitMQ基于AMQP协议. AMQP:是一个高级抽象层消息通信协议,RabbitMQ是AMQP协议的实现 RabbitMQ使用:Exchange(交换机)根据routing-key(路由选择键 ...
- centos 网络连接查看
安装iftop. 这个得先安装epel #yum install epel-replease -y #yum install iftop -y #iftop
- poj 2923 Relocation 解题报告
题目链接:http://poj.org/problem?id=2923 题目意思:给出两部卡车能装的最大容量,还有n件物品的分别的weight.问以最优方式装入,最少能运送的次数是多少. 二进制表示物 ...
- html5--6-35 列表和表格
html5--6-35 列表和表格 实例 学习要点 掌握列表和表格的样式设置 表格有关的属性: border-collapse 设置是否把表格边框合并为单一的边框.属性值:separate 默认值/c ...
- 【Selenium】显示、隐式等待
显示等待 WebDriverWait 超时抛出TimeOutException,默认500毫秒 public class WaitToReturnElement { /* * 设置超时时间为5秒,返回 ...
- Linux下使用pip安装keras
Keras是一个底层使用Theano或TensorFlow的深度学习框架,它的设计参考了Torch,用Python语言编写,也很方便使用Python调用,是一个高度模块化的神经网络库,支持使用GPU和 ...