题目是保密的,所以我只写题解了,先%曹力升大爷一发。
设ci,jc_{i,j}表示前ii个数,取jj个数乘起来的和。
比如{a1,a2,a3}\left\{a1,a2,a3\right\}这个集合,c3,2=a1∗a2+a1∗a3+a2∗a3c_{3,2}=a_1*a_2+a_1*a_3+a_2*a_3,也就是说我们求出来的答案还要乘一个阶乘就是最终答案了。
考虑求区间[l,r][l,r]取kk个的答案getAns(l,r,k)getAns(l,r,k)。
getAns(l,r,k)=cr,k−cl−1,k−∑i=1k−1(getAns(l,r,k−i)×cl−1,i)getAns(l,r,k)=c_{r,k}-c_{l-1,k}-\sum\limits_{i=1}^{k-1}(getAns(l,r,k-i)\times c_{l-1,i})
前面两项应该很显然,先减掉因子都不在[l,r][l,r]里面的,然后那个和式处理的就是因子两边都有的情况,先枚举ll左边的因子有多少个,然后ll右边的就有k−ik-i个,脑补一下发现那两个东西是可以乘起来的。(乘法分配律。。。。(大雾 %zqf) )
还有一个蛋疼的东西,那就是处理最小值,还是一样的,先找出最小值的位置,线段,RMQ什么的都可以。
然后就是要减掉因子包含最小值的乘积啦,记这些乘积的和为FF,最小值的位置为pp。
则F=∑i=0k−1(getAns(l,p−1,i)×getAns(p+1,r,k−i−1)×min)F=\sum\limits_{i=0}^{k-1}(getAns(l,p-1,i)\times getAns(p+1,r,k-i-1)\times min)
减掉F<script type="math/tex" id="MathJax-Element-17">F</script>,乘个阶乘,完事。
今天月考雪崩。。。。。。(%zqf)
之前写了个线段树,超时了,改了RMQ还超时,后来发现数组开小了,取六个数数组开成了6也是醉了,开7好吧。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define X first
#define Y second
#define MP make_pair
#define pii pair<int,int>
#define LL unsigned int
#define pll pair<LL,LL>
#define DEBUG(...) fprintf(stderr,__VA_ARGS__)
using namespace std;
const int MAXN=1e5+10,MAXNODE=4*MAXN;
void Read(LL& x)
{x=0;bool flag=0;char c;while(c=getchar()){if(c>='0'&&c<='9')x*=10,x+=c-'0',flag=1;else if(flag)break;}
}
template <typename T>
void write(T v) {static int st[30];int tp = 0;T t = v;if(t < 0) putchar('-'), t = -t;while(t) st[++tp] = t % 10, t /= 10;if(tp == 0)     putchar('0');while(tp) putchar(st[tp--] + '0');
}
LL zqf,c[MAXN][7],n,q,l,r,k,fac[7]={0,1,2,6,24,120,720},f[32][MAXN],t[32][MAXN];
pll planet[MAXN];
void pre()
{for(int i=1;i<=n;i++){for(int j=1;j<=min(n,(LL)6);j++){if(j==(LL)1)c[i][j]=(c[i-1][j]+planet[i].Y);elsec[i][j]=(c[i-1][j]+(planet[i].Y*c[i-1][j-1]));}}for(int i = 1; i <= n; i++)f[0][i] = planet[i].Y, t[0][i] = i;for(int i = 1; (1 << i) <= n; i++) {for(int j = 1; j + (1 << i) - 1 <= n; j++) {if(f[i - 1][j] <= f[i - 1][j + (1 << (i-1))]) {f[i][j] = f[i - 1][j]; t[i][j] = t[i - 1][j];}else {f[i][j] = f[i - 1][j + (1 << (i-1))]; t[i][j] = t[i - 1][j + (1 << (i-1))];  }}}
}
pair<LL, LL> RMQ(LL L, LL R) {LL k = 0;while(L + (1 << (k+1)) - 1 <= R)k++;if(f[k][L] <= f[k][R - (1 << k) + 1]) {return MP(f[k][L], t[k][L]);}return MP(f[k][R - (1 << k) + 1], t[k][R - (1 << k) + 1]);
}
LL getAns(int l,int r,int k)
{LL ans=c[r][k]-c[l-1][k];if(k<=0)return 1;if(k==1){ans=c[r][k]-c[l-1][k];return ans;}for(int i=1;i<=k-1;i++){ans-=c[l-1][i]*getAns(l,r,k-i);}return ans;
}
int main()
{freopen("melancholy.in","r",stdin);freopen("melancholy.out","w",stdout);Read(n);Read(q);for(int i=1;i<=n;i++)Read(planet[i].X);for(int i=1;i<=n;i++)Read(planet[i].Y);sort(planet+1,planet+1+n);pre();while(q--){Read(l);Read(r);Read(k);l=lower_bound(planet+1,planet+1+n,MP(l,(LL)0))-planet;r=upper_bound(planet+1,planet+1+n,MP(r,(LL)1e9+8))-planet-1;if(r<l){printf("0\n");continue;}   LL ans=getAns(l,r,k);pll _min((LL)1e9+8,(LL)1e9+8);_min=RMQ(l, r);for(int i=0;k!=1&&i<=k-1;i++){ans-=((getAns(l,_min.Y-1,i)*getAns(_min.Y+1,r,k-i-1))*_min.X);}if(k==1)ans-=_min.X;cout<<(LL)fac[k]*ans<<endl;}int p=1;
}

Melancholy 题解相关推荐

  1. [JS][dfs]题解 | #迷宫问题#

    题解 | #迷宫问题# 题目链接 迷宫问题 题目描述 定义一个二维数组 N*M ,如 5 × 5 数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 1, 1 ...

  2. [JS][dp]题解 | #打家劫舍(一)#

    题解 | #打家劫舍(一)# 题目链接 打家劫舍(一) 题目描述 描述 你是一个经验丰富的小偷,准备偷沿街的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家, ...

  3. [JS]题解 | #魔法数字#

    题解 | #魔法数字# 题目链接 魔法数字 题目描述 牛妹给牛牛写了一个数字n,然后又给自己写了一个数字m,她希望牛牛能执行最少的操作将他的数字转化成自己的. 操作共有三种,如下: 在当前数字的基础上 ...

  4. [JS]题解 | #岛屿数量#

    题解 | #岛屿数量# 题目链接 岛屿数量 题目描述 时间限制:1秒 空间限制:256M 描述 给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛.我们只考虑上下左右 ...

  5. [JS] 题解:提取不重复的整数

    题解:提取不重复的整数 https://www.nowcoder.com/practice/253986e66d114d378ae8de2e6c4577c1 时间限制:1秒 空间限制:32M 描述 输 ...

  6. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  7. [洛谷1383]高级打字机 题解

    题解 这道题一看就珂以用主席树啊 这是一道神奇的题目,那么我们先敲一个主席树,然后维护一个数组len,表示下一次应该在len + 1插入, 之后对于T操作,在上一个版本的len + 1上直接执行插入 ...

  8. luogu P1549 棋盘问题(2) 题解

    luogu P1549 棋盘问题(2) 题解 题目描述 在\(N * N\)的棋盘上\((1≤N≤10)\),填入\(1,2,-,N^2\)共\(N^2\)个数,使得任意两个相邻的数之和为素数. 例如 ...

  9. 【题解搬运】PAT_L1-009 N个数求和

    从我原来的博客上搬运.原先blog作废. (伪)水题+1,旨在继续摸清这个blog(囧 题目 就是求N个数字的和.麻烦的是,这些数字是以有理数"分子/分母"的形式给出的,你输出的和 ...

  10. 第五届合肥工业大学宣城校区程序设计大赛题解

    问题 A: 小问题 时间限制: 1 Sec  内存限制: 128 MB  Special Judge 题目描述 林喵喵特别喜欢解决女孩子们提出的问题. 于是, 有一天殷老师问了林喵喵一个小问题. 给出 ...

最新文章

  1. find name 模糊匹配_MYSQL关于find_in_set()函数的使用详解和like的区别之处
  2. MongoDB:利用官方驱动改装为EF代码风格的MongoDB.Repository框架 五 --- 为ListMongoDBRef增加扩展方法...
  3. vb6 判断打印机是否有效_智能收银机的热敏打印机打不出字怎么办?
  4. c语言字符串的一个简单例子,把一个字符串中的小写字母改成大写字母
  5. 统计信号处理基础 - 估计与检测理论 估计部分习题3.7公式推导
  6. ESP32 + ESP-IDF |GPIO 03 - 定时器轮询按钮的状态,控制LED亮或者灭
  7. datatable使用groupby进行分组统计 [2]
  8. 惠而浦扫地机器人充不进电_【今日关注】惠而浦扫地机器人怎么样?体验2个月之肺腑之言? | 智能扫地机器人评测...
  9. JavaScript对象相关及json总结(附实例)
  10. 人民银行计算机机房,中国人民银行行计算机中心机房管理详细规定.doc
  11. 儿童专注力训练——虚线描成实现
  12. 计算机进行定理的自动证明属于,使用计算机进行定理的自动证明,属于计算机在()应用领域的应用...
  13. 【CXY】JAVA基础 之 逻辑控制
  14. imagecreatefromjpeg(): gd-jpeg, libjpeg: recoverable error: Corrupt JPEG data: 1 extraneous bytes be
  15. php伪造来路301,使用 fsockopen 伪造来路
  16. 滑铁卢计算机博士offer,喜讯!祝贺天和学子收获滑铁卢大学ECE工程硕士Offer!...
  17. codevs3287货车运输[倍增]
  18. 关于松下A6伺服的再生电阻问题
  19. Fluent共轭传热分析实例-从三维建模到计算结果可视化
  20. 摸鱼的小贤在瞎搞R - R语言内置数据集的使用

热门文章

  1. K210(SiPEED MaixBit)MicroPython使用参考(一、软硬件环境)
  2. qq红包代码加群链接
  3. 中国大学MOOC-人工智能实践:Tensorflow笔记-课程笔记 Chapter5
  4. 连连跨境支付独立站收款,最高90天提现0费率!
  5. web期末大作业:基于html+css+js制作 学校班级网页制作我的校园
  6. 炙手可热的ZNS SSD将会为数据中心带来什么?
  7. Applese涂颜色-欧拉降幂公式
  8. 未了(endless)([CCF] NOI Online 能力测试2 入门组第一题)
  9. html页脚的话,HTML页脚footer标记
  10. Photoshop软件介绍