洛谷 3932 浮游大陆的68号岛 前缀和
2017-11-03 21:16
417 查看
题目:
https://www.luogu.org/problemnew/show/3932
我用的前缀和和别人不太一样……
好像做了许多无用功……;
注意,取模要彻底,特别是有乘的时候;
还有为了防止负数,要加上Mod再%;
https://www.luogu.org/problemnew/show/3932
我用的前缀和和别人不太一样……
好像做了许多无用功……;
注意,取模要彻底,特别是有乘的时候;
还有为了防止负数,要加上Mod再%;
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> using namespace std; typedef long long ll; const ll MAXN=300001,Mod=19260817; ll lsum[MAXN],rsum[MAXN],lnum[MAXN],rnum[MAXN]; ll dis[MAXN],num[MAXN]; ll la[MAXN],ra[MAXN]; ll n,m,ans; void solve() { scanf("%lld%lld",&n,&m); for(int i=2;i<=n;i++) { scanf("%lld",&dis[i]); rsum[i]=(rsum[i-1]+dis[i])%Mod; } for(int i=1;i<=n;i++) { scanf("%lld",&num[i]); rnum[i]=(rnum[i-1]+num[i])%Mod; ra[i]=(ra[i-1]+(num[i]*rsum[i]))%Mod; } for(int i=n;i>=1;i--) { lsum[i]=((rsum -rsum[i])%Mod+Mod)%Mod,lnum[i]=((rnum -rnum[i-1])%Mod+Mod)%Mod; la[i]=(la[i+1]+(num[i]*lsum[i]))%Mod; } ll x,l,r; while(m--) { scanf("%lld%lld%lld",&x,&l,&r); ans=0; if(x<=l)//从右往左走; ans=(ra[r]-ra[l-1]-(rsum[x]*(rnum[r]-rnum[l-1]))%Mod)%Mod; else if(x>=r)//从左往右走; ans=(la[l]-la[r+1]-(lsum[x]*(lnum[l]-lnum[r+1]))%Mod)%Mod; else if(x<r && x>l) ans=(ra[r]-ra[x-1]-(rsum[x]*(rnum[r]-rnum[x-1]))%Mod+la[l]-la[x+1]-(lsum[x]*(lnum[l]-lnum[x+1]))%Mod)%Mod; while(ans<0) ans+=Mod; printf("%lld\n",ans); } } int main() { solve(); return 0; }
相关文章推荐
- 洛谷3932:浮游大陆的68号岛——题解
- 洛谷10月月赛R2-T1-浮游大陆的68号岛
- 线段树 洛谷P3932 浮游大陆的68号岛
- [luogu3932] 浮游大陆的68号岛
- Luogu 3932(公式推导)(浮游大陆的68号岛)
- [洛谷P3962]浮游大陆的68号岛
- P3932 浮游大陆的68号岛 【线段树】
- P3932 浮游大陆的68号岛 【线段树】
- 洛谷P3932 浮游大陆的68号岛
- noip模拟赛 浮游大陆的68号岛
- 浮游大陆的68号岛
- 洛谷P1470 最长前缀
- 洛谷 3932 Chtholly!
- 【前缀和】 洛谷1371 NOI元丹
- 洛谷 P1314 聪明的质监员【二分+前缀和】
- 【DP】洛谷 P1470 最长前缀 Longest Prefix
- 【DP】+【贪心】【前缀和】洛谷P2893 [USACO08FEB]修路Making the Grade 题解
- 二分查找前缀和(洛谷1314聪明的质监员NOIP2011提高组)
- 洛谷 P2184 贪婪大陆( 树状数组的活用 )
- 【洛谷 P1627】 中位数 递推+前缀和思想