51nod 1617 奇偶数组
传送门
回来看一眼51nod,发现自己掉到rank4了,赶紧切道题回rank3。
一眼不会做,这种东西应该慢慢找规律吧……然后看到数据范围其实比较小,应该是单次log的,那是不是可以分治啊。
#include<cstdio> #include<algorithm> #define ll long long using namespace std;ll n,l,r,L,R;int m,MOD; int M(int x){while(x>=MOD)x-=MOD;while(x<0)x+=MOD;return x;} int f(ll x){x%=MOD;return (x*(x+1)>>1)%MOD;}struct na{int sum,n;na(int _sum=0,int _n=0):sum(_sum),n(_n){}; }; na operator + (na a,na b){return na(M(a.sum+b.sum),M(a.n+b.n));} na cgl(na a){return na(M(a.sum*2-a.n),a.n);} na cgr(na a){return na(M(a.sum*2),a.n);} na mmh(ll n,ll l,ll r,ll L,ll R){if (L>n||L>R||l>n||r<1||R<0) return na(0,0);if (l<1) l=1;if (r>n) r=n;if (R>n) R=n;if (l==1&&r==n) return na(M(f(R)-f(L-1)),(R-L+1)%MOD);ll mid=(n+1)>>1;na MMH=cgl(mmh(mid,l,r,(L>>1)+1,R+1>>1))+cgr(mmh(n-mid,l-mid,r-mid,L+1>>1,R>>1));return MMH; } int main(){scanf("%lld%d%d",&n,&m,&MOD);while(m--){scanf("%lld%lld%lld%lld",&l,&r,&L,&R);printf("%d\n",mmh(n,l,r,L,R).sum);} }
View Code
转载于:https://www.cnblogs.com/Enceladus/p/8682117.html
51nod 1617 奇偶数组相关推荐
- 51Nod 1294 修改数组 —— LIS
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1294 1294 修改数组 题目来源: HackerRank ...
- 51nod 1050循环数组最大字段和
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1050 思路解析:一开始想着直接将长度为n的数组延长至2n-1 ...
- 51Nod 1050 循环数组最大子段和
有两种方式: 1.在首尾之间 2.在尾首之间 对于第一种直接来dp就好,第二种需要将其数组全部取负,然后取到其最大值(肯定是负数的最大值)然后dp即可,最后比较这两个答案谁比较大就输出哪个 1 #in ...
- 【51Nod - 1270】数组的最大代价(dp,思维)
题干: 数组A包含N个元素A1, A2......AN.数组B包含N个元素B1, B2......BN.并且数组A中的每一个元素Ai,都满足1 <= Ai <= Bi.数组A的代价定义如下 ...
- 【51Nod - 1215 】数组的宽度 (单调栈 或 分治 或 单调队列,算贡献,需去重)
题干: N个整数组成的数组,定义子数组aii..ajj的宽度为:max(ai..aj) - min(ai..aj),求所有子数组的宽度和. Input 第1行:1个数N,表示数组的长度.(1 < ...
- 【51Nod - 1001 】 数组中和等于K的数对 (排序+ 尺取)
题干: 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对.例如K = 8,数组A:{-1,6,5,3,4,2,9,0,8},所有和等于8的数对包括(-1,9 ...
- 51nod 1050 循环数组最大子段和【环形DP/最大子段和/正难则反】
1050 循环数组最大子段和 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 N个整数组成的循环序列a[1],a[2],a[3],-,a[n],求该 ...
- 将下列数组中奇数和偶数分别存放于两个不同的两个数组
将下列数组中奇数和偶数分别存放于两个不同的两个数组 /* * 将下列数组中奇数和偶数分别存放于两个不同的两个数组 * */ public class Test09 {public static voi ...
- LintCode 1689. k求和III(递归)
1. 题目 给出 n 个正整数和整数 k 以及一个目标数字 target. 在 n 个数中找出 k 个奇数 或 k 个偶数 使得和为target,输出方案数 样例 1: 给出 `[1,2,3,4], ...
最新文章
- Django1.7开发博客
- Go语言TCP网络编程(详细)
- Druid 连接泄漏监测
- SAP Commerce Cloud 2011装好之后,访问Accelerator时遇到错误
- 一个法国摄影师在中国
- NFT游戏Illuvium获500万美元种子轮融资,Framework Ventures领投
- 赋值运算符函数__from 剑指Offer
- 前端—每天5道面试题(6)
- 平均年薪 70 万!刚刚,这类程序员又涨薪了!佩服!
- 如何选择条形码识别SDK
- 阿里巴巴直播防控中的实人认证技术 1
- 一个人知道自己为什么而活,就可以忍受任何一种生活
- python分析比赛_世界杯:用Python分析热门夺冠球队-(附源代码)
- scrcpy CreateProcessW() error 5
- NRF51822——LCD128X64驱动
- 库卡机器人profinet连接说明(西门子PLC部分)
- 奶茶制作APP开发模式解析
- MFC中Tab Control控件的使用
- 计算机打不开打印机设备,打印机和设备打不开如何解决-解决打印机和设备打不开的方法 - 河东软件园...
- flann的接口介绍