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

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

每次他们会选出一个小妖精,然后剩下的人找到区间[l,r][l,r]储物点的所有东西,清点完毕之后问她,把这个区间内所有储物点的东西运到另外一个仓库的代价是多少?

比如储物点ii有xx个东西,要运到储物点jj,代价为

x * dis( i , j )

dist就是仓库间的距离。

当然啦,由于小妖精们不会算很大的数字,因此您的答案需要对19260817取模。

输入输出格式

输入格式:
第一行两个数表示n,mn,m
第二行n-1n−1个数,第ii个数表示第ii个储物点与第i+1i+1个储物点的距离

第三行nn个数,表示每个储物点的东西个数

之后mm行每行三个数x l r

表示查询要把区间[l,r][l,r]储物点的物品全部运到储物点x的花费

输出格式:
对于每个询问输出一个数表示答案

输入输出样例

输入样例#1:
5 5
2 3 4 5
1 2 3 4 5
1 1 5
3 1 5
2 3 3
3 3 3
1 5 5
输出样例#1:
125
72
9
0
70
说明

对于30%的数据,n , m \le 1000n,m≤1000
对于另外20%的数据,所有储物点间的距离都为1

对于另外20%的数据,所有储物点的物品数都为1

对于100%的数据 , n , m <= 200000 ;n,m≤200000;ai,bi<=2⋅10^9


洛谷月赛题

具体解法见题解这里记录一些错误与注意事项

1 思维僵化

bzoi LittlePrincess十分喜爱安利树状数组,众所周知。
然后这道题的数据范围是20w 很自然想到nlogn复杂度哇,加之本蒟蒻喜爱安利树状数组,然后就写了个树状数组。。写完发现不用动态QAQ。。

①静态题不要想bit数组!
②不要被数据范围蒙蔽!

2 模法

/* (a + b) mod n = ((a mod n) + (b mod n)) mod n (a - b) mod n = ((a mod n) - (b mod n) + n) mod n (a * b) mod n = ((a mod n) * (b mod n)) mod n 对于除法没有类似公式,但是可以通过求逆元的方法,转换成乘法运算求模(见下面)
*/  

取膜一定要按照法则,不要yy,更不要xjb模
下面是很沙茶的bit数组代码

#include<bits/stdc++.h>
using namespace std;
#define lb(x) x&-x
#define LL long long
#define MN 200010
int n,m,ll,rr,dis[MN],dep[MN],c1[MN],c2[MN],a[MN],x,p=19260817;
void ad2(int x,int pos)
{for(;pos<=n;pos+=lb(pos)) c2[pos]+=x,c2[pos]%=p;
}
void ad1(int x,int pos)
{for(;pos<=n;pos+=lb(pos)) c1[pos]+=x,c1[pos]%=p;
}
int gsum1(int pos)
{int ans=0;for(;pos;pos-=lb(pos)) {ans+=c1[pos],ans%=p;}return ans;
}
int gsum2(int pos)
{int ans=0;for(;pos;pos-=lb(pos)) {ans+=c2[pos],ans%=p;}return ans;
}
int work(int l,int r,int k,int x)
{if(l>r) return 0;int ans=0;int wor=(((gsum2(r)-gsum2(l-1))%p+p)%p);int rwz=((gsum1(r)-gsum1(l-1))%p+p)%p;int xgz=((dis[x]%p)*(((gsum2(r)-gsum2(l-1))%p+p)%p))%p;if(k==-1) ans=((rwz-xgz)%p);else ans=((xgz-rwz+p)%p)%p;return ans;
}
int main()
{//freopen("sample4.in","r",stdin);//freopen("a.txt","w",stdout);cin>>n>>m;for(int i=2,_;i<=n;i++){cin>>_;dis[i]=(dis[i-1]+_)%p;}for(int i=1;i<=n;i++){cin>>a[i];a[i]%=p;ad2(a[i],i);}for(int i=1;i<=n;i++) dep[i]=(((dis[i]%p)*(a[i]%p))%p+p)%p,ad1(dep[i],i);while(m--){cin>>x>>ll>>rr;if(x>rr) cout<<work(ll,rr,1,x)<<endl;else if(x<ll) cout<<work(ll,rr,-1,x)<<endl;else cout<<(work(ll,x-1,1,x)+work(x+1,rr,-1,x))%p<<endl;}
}

下面是ac代码

#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define MN 200010
int n,m,ll,rr,dis[MN],sum1[MN],sum2[MN],a[MN],x,p=19260817;
int work(int l,int r,int k,int x)
{if(l>r) return 0;return k==-1?((sum1[r]-sum1[l-1]+p)%p-((LL)dis[x]*((sum2[r]-sum2[l-1]+p)%p))%p+p)%p:(((LL)dis[x]*((sum2[r]-sum2[l-1]+p)%p))%p-(sum1[r]-sum1[l-1]+p)%p+p)%p;
}
int main()
{
//  freopen("sample3.in","r",stdin);
//  freopen("a.txt","w",stdout);cin>>n>>m;for(int i=2,_;i<=n;i++) cin>>_,dis[i]=(dis[i-1]+_)%p;//sum1[i]=(sum1[i-1]+dis[i])%p;for(int i=1;i<=n;i++) cin>>a[i],a[i]%=p,sum2[i]=(sum2[i-1]+a[i])%p,sum1[i]=(sum1[i-1]+((LL)a[i]*dis[i])%p)%p;
//  for(int i=1;i<=n;i++) if(sum2[i]<0||dis[i]<0||a[i]<0) cout<<" swdwd";while(m--){cin>>x>>ll>>rr;if(x>rr) cout<<work(ll,rr,1,x)<<endl;else if(x<ll) cout<<work(ll,rr,-1,x)<<endl;else cout<<(work(ll,x-1,1,x)+work(x+1,rr,-1,x))%p<<endl;} return 0;
}

洛谷八连测——关于取模与思维僵化相关推荐

  1. 【洛谷八连测R2】fateice-or

    题目背景 题目描述 悬浮大陆群边境地带 68号岛,妖精仓库. 在威廉的面前有着数不清的护符,这些护符的功能值从00到2^{30}-1230−1,且每种功能值的护符都可以多次使用.为了调整圣剑,迎战接下 ...

  2. T13735 fateice-string洛谷八连测2

    [题目描述]:两天前,被授予启动能力的斯雷因·特洛耶特伯爵准备对启动装置进行加密,以防有人趁其不备破坏装置. 他将这个任务交给了他的心腹哈库莱特.忠实的哈库莱特认为,只需要输入密码就能解锁的加密装置实 ...

  3. 洛谷P1758 [NOI2009]管道取珠(dp 贡献转化)

    题目 bzoj1566 两个管道的小球序列, 分别用长为n(n<=500)和长为m(m<=500)的仅由A和B构成的字符串表示 两个管道归并的时候,每次可以从上管道取一个球,也可以从下管道 ...

  4. 洛谷P1667/[10.22 模拟赛] 数列 (思维+模拟)

    洛谷P1667 数列 题目描述 给定一个长度是n的数列A,我们称一个数列是完美的,当且仅当对于其任意连续子序列的和都是正的.现在你有一个操作可以改变数列,选择一个区间[X,Y]满足\(A_X +A_{ ...

  5. 洛谷 - P1758 [NOI2009]管道取珠(计数dp)

    题目链接:点击查看 题目大意:给出两个长度分别为 n 和 m 的管道,每个管道中都只有两种颜色的珠子,现在可以按照规则组成序列,共可以组成 C( n+m , n ) 个序列,假设共组成了 K 种不同的 ...

  6. 【洛谷P1430】序列取数【dp】

    题目大意: 题目链接:https://www.luogu.org/problemnew/show/P1430 给定一个长为n的整数序列,由A和B轮流取数(A先取).每个人可从序列的左端或右端取若干个数 ...

  7. 洛谷4366——最短路(dijkstra,思维,异或)

    题目大意 给定一个n个点,m条边的图,每条边有边权,而每个点\(i\)也可以直接到达\(j\),代价是\(i\ xor\ j\),给定一个S和T,求S到T的最小代价 其中\(n\le100000,m\ ...

  8. 【洛谷】P1641 [SCOI2010]生成字符串(思维+组合+逆元)

    题目 传送门:QWQ 分析 不想画图. https://www.luogu.org/problemnew/solution/P1641 好神仙的题啊. 代码 1 // luogu-judger-ena ...

  9. 信息学奥赛一本通 2007:【20CSPJ普及组】方格取数 | 洛谷 P7074

    [题目链接] ybt 2007:[20CSPJ普及组]方格取数 洛谷 P7074 [CSP-J2020] 方格取数 [题目考点] 1. 坐标型动规 [解题思路] 确定状态:a[i][j]为从起点走到i ...

最新文章

  1. 用C语言解“支票问题”题
  2. php禁用cookie后session设置方法分析
  3. 判断星座PHP,php根据日期判断星座的函数分享_PHP教程
  4. 使用jQuery的ajax同步请求吃过的亏
  5. 如果你20秒钟还看不懂这个短信的话,说明你还纯洁!?
  6. linux下can调试工具canutils安装过程记录
  7. Android自定义ListView示例,以创建不可滚动的ListView
  8. Windows系统下各浏览器常用CSS hack汇总表图
  9. 啊哈算法-bfs-解救小哈
  10. CE教程步骤8操作指南
  11. Linux看视频不卡的,Ubuntu 8.04下安装电视卡看电视
  12. 【拥塞管理】配置低延迟队列LLQ
  13. 我为什么要表扬深信服(转)
  14. 惯导平台稳定系统matlab仿真研究,惯导平台稳定系统MATLAB仿真研究
  15. QT quick中的登录界面(Rectangle,TextField文本框的使用)
  16. 华为nova手机打开开发者模式
  17. 阿里云服务器CentOS8安装Kafka
  18. 计算机桌面有个方框,电脑屏幕的白色方框怎么清除
  19. 林肯公园(LINKIN PARK)上海演唱会观众座位表(转帖)
  20. IMAX [生活时尚]

热门文章

  1. 关于background背景和img图片
  2. CodeBlocks下创建.h .cpp文件
  3. 何恺明目前的学术成果是否够得上计算机视觉领域历史第一人?
  4. wordpress创建_您可以使用WordPress创建的19种网站类型
  5. 今天我被微软狠狠地雷翻了
  6. iOS Bilibili/ijkplayer 集成与使用
  7. php 2038,PHP转换超过2038年的日期出错问题解决
  8. 整数分解 费马方法c语言,因数分解(费马的方法)
  9. Airbnb、小猪短租等这类短租类产品发展前景如何?
  10. MATLAB解隐函数方程时符号表达式转化为数值的方法-用vpa函数