[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\}\) ...
随机推荐
- strsep strpbrk
#include <stdio.h> #include <string.h> int main(void) { char s[] = "aa,bb,cc.11,22, ...
- (转载)display:inline、block、inline-block的区别
display:block就是将元素显示为块级元素. block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都可控制: 宽度缺省是它的容器的100%,除非设定一个宽度 <div& ...
- 十天学习PHP之第二天
学习目的:学会构建数据库 在ASP中,假设是ACCESS数据库你能够直接打开ACCESS来编辑MDB文件,假设是SQL SERVER你能够打开企业管理器来编辑SQL SERVER数据库.可是在PHP ...
- VUE 之 vuex 和 axios
1.Vuex 部分 1.1 Vuex 是专门为vue.js设计的集中式状态管理架构,其实就是将数据存在一个store中,共各个组件共享使用 1.2 配置: 1.2.1 下载:--npm install ...
- What is the difference between message queue pattern and publish-subscribe?
What is the difference between message queue pattern and publish-subscribe? - Quora https://www.quor ...
- dataTables-details 1.9
本文共四部分:官网 | 基本使用|遇到的问题|属性表 一:官方网站:[http://www.datatables.net/] 二:基本使用:[http://www.guoxk.com/node/jqu ...
- Record is locked by another user
Oracle修改表中记录时出现record is locked by another user的问题 在操作表时没有commit,导致表被锁,只要执行下面两行语句,就可以了将行锁解锁了. Select ...
- POJ1087 A Plug for UNIX —— 最大流
题目链接:https://vjudge.net/problem/POJ-1087 A Plug for UNIX Time Limit: 1000MS Memory Limit: 65536K T ...
- POJ3074 Sudoku —— Dancing Links 精确覆盖
题目链接:http://poj.org/problem?id=3074 Sudoku Time Limit: 1000MS Memory Limit: 65536K Total Submissio ...
- POJ - 2142 The Balance(扩展欧几里得求解不定方程)
d.用2种砝码,质量分别为a和b,称出质量为d的物品.求所用的砝码总数量最小(x+y最小),并且总质量最小(ax+by最小). s.扩展欧几里得求解不定方程. 设ax+by=d. 题意说不定方程一定有 ...