题目描述

妖精仓库里生活着黄金妖精们,她们过着快乐,却随时准备着迎接死亡的生活。

换用更高尚的说法,是随时准备着为这个无药可救的世界献身。

然而孩子们的生活却总是无忧无虑的,幼体的黄金妖精们过着天真烂漫的生活,自然也无暇考虑什么拯救世界之类的重任。

有一天小妖精们又在做游戏。这个游戏是这样的。

妖精仓库的储物点可以看做在一个数轴上。每一个储物点会有一些东西,同时他们之间存在距离。

分析:x相对于[l,r]有3种可能的情况,要么在区间里,要么在区间左边,要么在区间右边。分类讨论,如果x在区间左边,ans = bi*(xi - x) + bi+1*(xi+1-x) + ...... + br*(xr - x).其中xi是第i个点的位置,x是x的位置.将结构相同的放在一起:ans=Σbixi - xΣbi.同理,如果x在区间右边:ans=xΣbi - Σbixi,在区间中的话就分左半区间和右半区间分别处理.得到这个式子就好办多了,前缀和就能搞定.只是要mod一个数,在做减法的时候一定要+模数,否则就会出现负数!!!

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; typedef long long ll; const ll mod = ; ll n, m, d[], a[], sum[]; int main()
{
scanf("%lld%lld", &n, &m);
for (int i = ; i <= n; i++)
{
scanf("%lld", &d[i]);
d[i] += d[i - ];
d[i] %= mod;
}
for (int i = ; i <= n; i++)
scanf("%lld", &a[i]);
for (int i = ; i <= n; i++)
{
sum[i] = sum[i - ] + ((d[i] * a[i]) % mod);
sum[i] %= mod;
a[i] += a[i - ];
a[i] %= mod;
}
for (int i = ; i <= m; i++)
{
long long x, l, r;
scanf("%lld%lld%lld", &x, &l, &r);
if (x <= l)
{
long long temp3 = (a[r] - a[l - ] + mod) % mod;
long long temp = (temp3 * d[x]) % mod;
long long temp2 = (sum[r] - sum[l - ] + mod) % mod;
long long ans = (((temp2 - temp + mod) % mod) + mod) % mod;
printf("%lld\n", ans);
}
else
if (x >= r)
{
long long temp3 = (a[r] - a[l - ] + mod) % mod;
long long temp = (temp3 * d[x]) % mod;
long long temp2 = (sum[r] - sum[l - ] + mod) % mod;
long long ans = (((temp - temp2 + mod) % mod) + mod) % mod;
printf("%lld\n", ans);
}
else
{
long long temp5 = (a[r] - a[x] + mod) % mod;
long long temp6 = (a[x - ] - a[l - ] + mod) % mod;
long long temp3 = (sum[x - ] - sum[l - ] + mod) % mod;
long long temp4 = (sum[r] - sum[x] + mod) % mod;
long long temp1 = (temp5 * d[x]) % mod;
long long ans1 = (((temp4 - temp1 + mod)%mod) + mod) % mod;
long long temp2 = (d[x] * temp6) % mod;
long long ans2 = (((temp2 - temp3 + mod) % mod) + mod) % mod;
printf("%lld\n", (ans1 + ans2) % mod);
}
} return ;
}

最新文章

  1. NOIP2003pj栈[卡特兰数]
  2. 经验分享:Linux 双网卡 不同网段 网络互通
  3. linux 学习10 shell 基础
  4. 【Tree 2】树形结构数据呈现的非递归算法(循环)实现
  5. 09_Sum游戏(UVa 10891 Game of Sum)
  6. 同时执行2个存储过程,2个SP中分别有相同的临时表名,会有冲突吗?
  7. HDU5008 Boring String Problem(后缀数组)
  8. IOS试题收集1
  9. android对大图片的缓存处理
  10. 成为IT经理必备的十大软技能
  11. @Transactional 注解说明
  12. hdu 3832 Earth Hour (最短路变形)
  13. 初识ElasticSearch
  14. 配置GitHub Push自动触发Jenkins的构建
  15. sql查询优化策略
  16. 当页面上需要的字段不在model中时候,需要自行设置该字段
  17. Flink standalone模式作业执行流程
  18. C语言中连接器介绍
  19. [svc]tomcat目录结构/虚拟主机/nginx反向代理cache配置
  20. (原)android修改文件所属的用户组

热门文章

  1. JSP-Runoob:JSP 生命周期
  2. codeforces round #414 div1+div2
  3. bzoj4756
  4. jsp jquery js 的基本路径获取
  5. [Swift通天遁地]二、表格表单-(11)创建星期选项表单和拥有浮动标签的文本框
  6. C# System.Environment.GetFolderPath的使用 [转]
  7. Spring IOC set注入
  8. [ POI 2011 ] Party
  9. StackOverflowError&amp;OutOfMemoryError区别
  10. 【MySQL】RPM包安装