[洛谷P3932]浮游大陆的68号岛
题目大意:有一行物品,每两个物品之间有一个距离。每个物品有一个价值。现在问你若干问题,每个问题问你把l~r所有物品全部搬到物品x处需要多少价值。
把物品a搬到物品b处的价值为物品a的价值乘a到b的距离。
解题思路:前缀和。
首先我们考虑$x<l<r$的情况。
发现答案为$\sum\limits ^{r}_{i=l} a[i]×dis(x,i)$。其中a[i]是第i个物品的价值,dis(x,i)表示x到i的距离。
首先我们容易想到用前缀和保存距离,即$dis[i]=\sum\limits^r _{i=2}p[i]$。p[i]表示i到i-1的距离。
但时间复杂度仍然很高,怎么办?
我们可以再用一个前缀和,用ds[i]保存第1到i个物品,每个物品到第一个物品的价值总和,即$ds[i]=\sum\limits^r_i=1 a[i]×dis[i]$。
那么ds[r]-ds[l-1]就表示l到r所有物品搬到1的价值,可是要求的是到x的距离,怎么办?
我们发现,这个答案多出来的其实是l到r所有物品搬dis[x]距离的价值,即多搬了1到x的距离。
那么就在答案中减去$\sum\limits^r _{i=l} a[i]×dis[x]=(\sum\limits^r_{i=l}a[i])×dis[x]$。
发现a[i]也可以用前缀和,那么我们令$sum[i]=\sum\limits^r _{i=1} a[i]$。
那么最后答案为$ds[r]-sd[l-1]+dis[x]×(sum[r]-sum[l-1])$。
当$l<r<x$时,可以用后缀和,然后求解即可。
当$l\leq x\leq r$时,我们把它分成两段,l~x-1和x+1~r,分别求解即可。
由于求解时间复杂度$O(1)$,求前缀和时间复杂度$O(n)$,所以总时间复杂度$O(n+m)$,在洛谷神机+O2下时间完全不是问题。
注意边算边模和long long(数组也要,不然答案就会莫名其妙地错误)。
C++ Code:
#include<cstdio>
#include<cctype>
using namespace std;
#define mod 19260817
#define N 200020
int n,m,a[N];
long long disl[N],disr[N],dsl[N],dsr[N],suml[N],sumr[N];
inline int readint(){
char c=getchar();
for(;!isdigit(c);c=getchar());
int d=0;
for(;isdigit(c);c=getchar())
d=(d<<3)+(d<<1)+(c^'0');
return d;
}
inline long long ansL(int l,int r,int x){return((dsl[r]-dsl[l-1]+mod)%mod-(long long)disl[x]*((suml[r]-suml[l-1]+mod)%mod)%mod+mod)%mod;}
inline long long ansR(int l,int r,int x){return((dsr[l]-dsr[r+1]+mod)%mod-(long long)disr[x]*((sumr[l]-sumr[r+1]+mod)%mod)%mod+mod)%mod;}
int main(){
n=readint();
m=readint();
disl[1]=disr[n]=suml[0]=sumr[n+1]=0;
for(int i=2;i<=n;++i)disl[i]=(disl[i-1]+(a[i]=readint()%mod))%mod;
for(int i=n;i>1;--i)disr[i-1]=(disr[i]+a[i])%mod;
for(int i=1;i<=n;++i)suml[i]=(suml[i-1]+(a[i]=readint()%mod))%mod;
for(int i=n+1;i;--i)sumr[i]=(sumr[i+1]+a[i])%mod;
dsl[0]=dsr[n+1]=0;
for(int i=1;i<=n;++i)
dsl[i]=(dsl[i-1]+disl[i]*a[i]%mod)%mod;
for(int i=n;i;--i)
dsr[i]=(dsr[i+1]+disr[i]*a[i]%mod)%mod;
while(m--){
int x=readint(),l=readint(),r=readint();
if(l>r)l^=r^=l^=r;
if(x<l)printf("%d\n",(int)ansL(l,r,x));else
if(x>r)printf("%d\n",(int)ansR(l,r,x));else
printf("%d\n",(int)((ansR(l,x-1,x)+ansL(x+1,r,x))%mod));
}
return 0;
}
[洛谷P3932]浮游大陆的68号岛的更多相关文章
- 线段树 洛谷P3932 浮游大陆的68号岛
P3932 浮游大陆的68号岛 题目描述 妖精仓库里生活着黄金妖精们,她们过着快乐,却随时准备着迎接死亡的生活. 换用更高尚的说法,是随时准备着为这个无药可救的世界献身. 然而孩子们的生活却总是无忧无 ...
- P3932 浮游大陆的68号岛
P3932 浮游大陆的68号岛 妖精仓库的储物点可以看做在一个数轴上.每一个储物点会有一些东西,同时他们之间存在距离. 每次他们会选出一个小妖精,然后剩下的人找到区间[l,r]储物点的所有东西,清点完 ...
- P3932 浮游大陆的68号岛 【线段树】
P3932 浮游大陆的68号岛 有一天小妖精们又在做游戏.这个游戏是这样的. 妖精仓库的储物点可以看做在一个数轴上.每一个储物点会有一些东西,同时他们之间存在距离. 每次他们会选出一个小妖精,然后剩下 ...
- [Luogu3932] 浮游大陆的68号岛
题目背景 大样例下发链接: https://pan.baidu.com/s/1nuVpRS1 密码: sfxg 浮游大陆的68号岛,位于浮游大陆的边境地带.平时很少有人造访. 岛上被浓厚的森林覆盖. ...
- noip模拟赛 浮游大陆的68号岛
题目描述 妖精仓库里生活着黄金妖精们,她们过着快乐,却随时准备着迎接死亡的生活. 换用更高尚的说法,是随时准备着为这个无药可救的世界献身. 然而孩子们的生活却总是无忧无虑的,幼体的黄金妖精们过着天真烂 ...
- LuoguP3932 浮游大陆的68号岛 题解
Content 在一个无限长的数轴上有 \(n\) 个点.第 \(i\) 个点上面有 \(a_i\) 件物品,且第 \(i\) 个点到第 \(i+1\) 个点的距离为 \(b_i\). 定义从第 \( ...
- 洛谷 P2184 贪婪大陆 解题报告
P2184 贪婪大陆 题目背景 面对蚂蚁们的疯狂进攻,小\(FF\)的\(Tower\) \(defence\)宣告失败--人类被蚂蚁们逼到了\(Greed\) \(Island\)上的一个海湾.现在 ...
- 洛谷 P2446 [SDOI2010]大陆争霸 解题报告
P2446 [SDOI2010]大陆争霸 题目背景 在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭的神曾·布拉 ...
- 洛谷——P2446 [SDOI2010]大陆争霸
https://www.luogu.org/problem/show?pid=2446#sub 题目背景 在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的克里斯国.两个国家的人民分别 ...
随机推荐
- Idea配置文件的读取
开发过程中遇到配置文件读取问题,因此记录以后运用的到. 配置文件位置: 配置文件内容: default_size = 100 grid_size = 20 delayTime = 200 配置文件读取 ...
- (转载) Android开发时,那些相见恨晚的工具或网站!
huangmindong的专栏 目录视图 摘要视图 订阅 赠书 | 异步2周年,技术图书免费选 程序员8月书讯 项目管理+代码托管+文档协作,开发更流畅 Android ...
- JavaScript学习——使用JS完成页面定时弹出广告
1.获取图片的位置(document.getElementById(“”)) 隐藏图片:display:none 定时操作:setInterval(“显示图片的函数”,3000); 2.步骤分析 ( ...
- python中的json
import json# dumps #一般处理字符串# dump #一般处理文件 #字符串和json之间的转换test_dict={"name":"fxh", ...
- 优动漫PAINT-绘制透明布料教程
原是一篇日语教程,觉得挺不错的,就劳烦会日语的朋友帮忙翻译了,特此分享!希望可以帮助到大家在绘画上的学习!原教程转载优动漫官网. 作者:JaneMere 相关资讯还可以关注www.dongmansof ...
- vue下assets下的静态资源和static下的静态资源的区别
区别一(最终位置) assets文件是src下的,所以最后运行是需要进行打包,而static文件不需要打包直接放在最终的文件中了 区别二(引用方式) assets中的文件在vue中的template/ ...
- Nginx 禁止 ip 访问
server { listen 80 default_server; server_name _; access_log /logs/ip-access.log main; error_log /lo ...
- mysql和mongodb的区别
1.mongodb的概括 MongoDB(文档型数据库):提供可扩展的高性能数据存储 2.mongodb的功能概括 (1)基于分布式文件存储 (2)高负载情况下添加更多节点,可以保证服务器性能 (3) ...
- Django REST framework 自定义字段
自定义字段 继承 Field 类 覆盖父类中的方法 to_representation() 调用该方法将初始数据类型转换为基本的可序列化数据类型 to_internal_value() 调用该方法将原 ...
- C语言基础 (2) linux命令
01.课程回顾 链接 ln 1.txt aaa.txt 硬链接 (两个相互独立 删除一个另外一个还在) ln -s 1.txt aaa.txt软连接 (后面的是快捷方式) 硬链接只能是文件,软连接可 ...