题目链接:###

聚会

分析:###

设每个点到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的更多相关文章

  1. [NOIP2018校模拟赛]T1 阶乘

    题目: 描述 有n个正整数a[i],设它们乘积为p,你可以给p乘上一个正整数q,使p*q刚好为正整数m的阶乘,求m的最小值. 输入 共两行. 第一行一个正整数n. 第二行n个正整数a[i]. 输出 共 ...

  2. [NOIP2018校模拟赛]T2矩阵分组 Matrix

    题目链接: 矩阵分组 分析: 这道题求的是两部分极差当中大的那个的最小值.对于这种求最值的问题,我们很自然(其实并没有)地想到二分答案. 这个题有两个结论: (好像当时看出来了第一个?然后发现下面都不 ...

  3. 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解

    今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...

  4. NOI.AC: NOIP2018 全国模拟赛习题练习

    闲谈: 最后一个星期还是不浪了,做一下模拟赛(还是有点小虚) #30.candy 题目: 有一个人想买糖吃,有两家商店A,B,A商店中第i个糖果的愉悦度为Ai,B商店中第i个糖果的愉悦度为Bi 给出n ...

  5. 20180610模拟赛T1——脱离地牢

    Description 在一个神秘的国度里,年轻的王子Paris与美丽的公主Helen在一起过着幸福的生活.他们都随身带有一块带磁性的阴阳魔法石,身居地狱的魔王Satan早就想着得到这两块石头了,只要 ...

  6. NOIP欢乐模拟赛 T1 解题报告

    小澳的方阵 (matrix.cpp/c/pas) [题目描述] 小澳最近迷上了考古,他发现秦始皇的兵马俑布局十分有特点,热爱钻研的小澳打算在电脑上还原这个伟大的布局. 他努力钻研,发现秦始皇布置兵马俑 ...

  7. [模拟赛] T1 高级打字机

    Description 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小 ...

  8. 【洛谷】NOIP2018原创模拟赛DAY1解题报告

    点此进入比赛 T1:小凯的数字 题意:给定q个l,r,求l(l+1)(l+2)...(r-1)r模9的结果 很显然,这是道考验数(运)学(气)的题目 结论:输出\((l+r)*(r-l+1)\over ...

  9. 2019.2.25 模拟赛T1【集训队作业2018】小Z的礼物

    T1: [集训队作业2018]小Z的礼物 我们发现我们要求的是覆盖所有集合里的元素的期望时间. 设\(t_{i,j}\)表示第一次覆盖第i行第j列的格子的时间,我们要求的是\(max\{ALL\}\) ...

随机推荐

  1. adb pull 与 push

    adb pull <remote> <local> Copies a specified file from an emulator/device instance to yo ...

  2. Linux主要命令

    pwd  查看当前路径 cd ..    表示后一级目录级 cd .   表示当前目录 cd ../..   后退两级 cd  表示进入当前家目录 date 返回当前的一个具体时间    -s  修改 ...

  3. Chrome浏览器 js 关闭窗口失效解决方法

    //获取元素ID var DelHtml = document.getElementById("imgdel"); //alert(DelHtml); //添加点击事件 DelHt ...

  4. 【bzoj4240】有趣的家庭菜园

    只要统计每一个左右分别有多少比他高的去min,然后求和 #include<algorithm> #include<iostream> #include<cstdlib&g ...

  5. Statelessness Provide credentials with the request. Each request MUST stand alone and should not be affected from previous conversation happened from same client in past.

    The server never relies on information from previous requests. Statelessness As per the REST (REpres ...

  6. org.gradle.api.publication.maven.internal.DefaultMavenFactory错误

    Error:Unable to load class 'org.gradle.api.publication.maven.internal.DefaultMavenFactory'. Possible ...

  7. linux下如何用php读取word

    在实际的工作中遇到到要导入word格式的文件,经过努力,终于成功了. 在linux上用PHP读取WORD文档,其实是使用了 antiword程序把word文档转化为txt文档. 再使用php执行系统命 ...

  8. HDU3085 Nightmare Ⅱ —— 双向BFS + 曼哈顿距离

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3085 Nightmare Ⅱ Time Limit: 2000/1000 MS (Java/Other ...

  9. YTU 2420: C语言习题 不等长字符串排序

    2420: C语言习题 不等长字符串排序 时间限制: 1 Sec  内存限制: 128 MB 提交: 460  解决: 239 题目描述 在主函数中输入n(n<=10)个不等长的字符串.用另一函 ...

  10. Dedecms(织梦)文章内容页和图片集内容页,调用缩略图的方法

    Dedecms(织梦)文章内容页和图片集内容页,调用缩略图的方法,亲测可用! Dedecms(织梦)首页的图片调用,相信大家已经非常的清楚,但是今天我在进行内容页的编写的时候,发现了内容页图片的调用问 ...