传送门

  回来看一眼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 奇偶数组相关推荐

  1. 51Nod 1294 修改数组 —— LIS

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1294 1294 修改数组  题目来源: HackerRank ...

  2. 51nod 1050循环数组最大字段和

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1050 思路解析:一开始想着直接将长度为n的数组延长至2n-1 ...

  3. 51Nod 1050 循环数组最大子段和

    有两种方式: 1.在首尾之间 2.在尾首之间 对于第一种直接来dp就好,第二种需要将其数组全部取负,然后取到其最大值(肯定是负数的最大值)然后dp即可,最后比较这两个答案谁比较大就输出哪个 1 #in ...

  4. 【51Nod - 1270】数组的最大代价(dp,思维)

    题干: 数组A包含N个元素A1, A2......AN.数组B包含N个元素B1, B2......BN.并且数组A中的每一个元素Ai,都满足1 <= Ai <= Bi.数组A的代价定义如下 ...

  5. 【51Nod - 1215 】数组的宽度 (单调栈 或 分治 或 单调队列,算贡献,需去重)

    题干: N个整数组成的数组,定义子数组aii..ajj的宽度为:max(ai..aj) - min(ai..aj),求所有子数组的宽度和. Input 第1行:1个数N,表示数组的长度.(1 < ...

  6. 【51Nod - 1001 】 数组中和等于K的数对 (排序+ 尺取)

    题干: 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对.例如K = 8,数组A:{-1,6,5,3,4,2,9,0,8},所有和等于8的数对包括(-1,9 ...

  7. 51nod 1050 循环数组最大子段和【环形DP/最大子段和/正难则反】

    1050 循环数组最大子段和 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 N个整数组成的循环序列a[1],a[2],a[3],-,a[n],求该 ...

  8. 将下列数组中奇数和偶数分别存放于两个不同的两个数组

    将下列数组中奇数和偶数分别存放于两个不同的两个数组 /* * 将下列数组中奇数和偶数分别存放于两个不同的两个数组 * */ public class Test09 {public static voi ...

  9. LintCode 1689. k求和III(递归)

    1. 题目 给出 n 个正整数和整数 k 以及一个目标数字 target. 在 n 个数中找出 k 个奇数 或 k 个偶数 使得和为target,输出方案数 样例 1: 给出 `[1,2,3,4], ...

最新文章

  1. Django1.7开发博客
  2. Go语言TCP网络编程(详细)
  3. Druid 连接泄漏监测
  4. SAP Commerce Cloud 2011装好之后,访问Accelerator时遇到错误
  5. 一个法国摄影师在中国
  6. NFT游戏Illuvium获500万美元种子轮融资,Framework Ventures领投
  7. 赋值运算符函数__from 剑指Offer
  8. 前端—每天5道面试题(6)
  9. 平均年薪 70 万!刚刚,这类程序员又涨薪了!佩服!
  10. 如何选择条形码识别SDK
  11. 阿里巴巴直播防控中的实人认证技术 1
  12. 一个人知道自己为什么而活,就可以忍受任何一种生活
  13. python分析比赛_世界杯:用Python分析热门夺冠球队-(附源代码)
  14. scrcpy CreateProcessW() error 5
  15. NRF51822——LCD128X64驱动
  16. 库卡机器人profinet连接说明(西门子PLC部分)
  17. 奶茶制作APP开发模式解析
  18. MFC中Tab Control控件的使用
  19. 计算机打不开打印机设备,打印机和设备打不开如何解决-解决打印机和设备打不开的方法 - 河东软件园...
  20. flann的接口介绍

热门文章

  1. docker上你必须会的那些命令
  2. 2022-2028年中国UI设计行业现状调研分析及发展趋势研究报告
  3. 2022-2028年中国实心轮胎行业市场研究及前瞻分析报告
  4. python 实现桶排序
  5. 基类的析构函数为什么要设置成virtual
  6. log4j屏蔽掉某个包下的log日志打印
  7. 高级教程: 作出动态决策和 Bi-LSTM CRF 重点
  8. LeetCode简单题之差的绝对值为 K 的数对数目
  9. 基于区域的CNN(R-CNN)
  10. 2021年大数据Flink(十一):流批一体API Source