Description

DX3906星系,Melancholy星上,我在勘测这里的地质情况。
我把这些天来已探测到的区域分为N组,并用二元组(D,V)对每一组进行标记:其中D为区域的相对距离,V为内部地质元素的相对丰富程度。
在我的日程安排表上有Q项指派的计划。每项计划的形式是类似的,都是“对相对距离D在[L,R]之间的区域进行进一步的勘测,并在其中有次序地挑出K块区域的样本进行研究。”采集这K块的样品后,接下来在实验中,它们的研究价值即为这K块区域地质相对丰富程度V的乘积。
我对这Q项计划都进行了评估:一项计划的评估值P为所有可能选取情况的研究价值之和。
但是由于仪器的原因,在一次勘测中,这其中V最小的区域永远不会被选取。
现在我只想知道这Q项计划的评估值对2^32取模后的值,特殊地,如果没有K块区域可供选择,评估值为0。

Input

第一行给出两个整数,区域数N与计划数Q。
第二行给出N个整数,代表每一块区域的相对距离D。
第三行给出N个整数,代表每一块区域的内部地质元素的相对丰富程度V。
接下来的Q行,每一行3个整数,代表相对距离的限制L,R,以及选取的块数K。

Output

输出包括Q行,每一行一个整数,代表这项计划的评估值对2^32取模后的值。

Sample Input

5 3
5 4 7 2 6
1 4 5 3 2
6 7 1
2 6 2
1 8 3

Sample Output

5
52
924

Data Constraint

思路

发现k不大,而且是个区间问题,不妨考虑线段树。

线段树维护区间最小值和区间k=1…6的答案

合并时f[k]=f[i]*f[k-j]

代码

#include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std;
typedef unsigned int u32;const int maxn=1000005;
const u32 inf=4294967295u;int n,q;
int k;
struct node
{u32 d,v;
}a[maxn],L,R;
bool cmp(const node &a,const node &b) {return a.d < b.d;}struct power
{u32 val[7];friend power operator +(power a,power b){power c;for(int i=1; i<=6; i++) c.val[i]=a.val[i]+b.val[i];for(int i=1; i<=6; i++)for(int j=1; j < i; j++)c.val[i] += a.val[j]*b.val[i-j];return c;}
}Node[maxn],A[3],Ans;struct Min
{u32 val,pos;friend Min operator +(Min a,Min b){Min c=(Min){inf,0};if(a.val < c.val) c=a;if(b.val < c.val) c=b;return c;}
}Val[maxn],res_min;void build(int i,int l,int r)
{Val[i]=(Min){inf,0};for(int j=1; j<=6; j++) Node[i].val[j]=0;if(l == r){Node[i].val[1]=a[l].v;Val[i]=(Min){a[l].v,l};return;}int mid=l+r >> 1;build(i << 1,l,mid); build(i << 1 | 1,mid+1,r);Node[i]=Node[i << 1]+Node[i << 1 | 1];Val[i]=Val[i << 1]+Val[i << 1 | 1];
}void find(int i,int l,int r,int L,int R)
{if(L>R) return;if(L<=l&&r<=R){res_min=res_min+Val[i];return;}int mid=l+r >> 1;if(L<=mid) find(i << 1,l,mid,L,R);if(mid+1<=R) find(i << 1 | 1,mid+1,r,L,R);
}void query(int i,int l,int r,int L,int R,int opt)
{if(L>R) return;if(L<=l&&r<=R){A[opt]=A[opt]+Node[i];return;}int mid=l+r>>1;if(L<=mid) query(i<<1,l,mid,L,R,opt);if(mid+1<=R) query(i<<1|1,mid+1,r,L,R,opt);
}void solve(int k)
{int LL=lower_bound(a+1,a+n+1,L,cmp)-a;int RR=upper_bound(a+1,a+n+1,R,cmp)-a-1;if(LL>=RR) {printf("0\n"); return;}res_min=(Min){inf,0};find(1,1,n,LL,RR);for(int i=1; i<=6; i++) A[1].val[i]=A[2].val[i]=0;query(1,1,n,LL,res_min.pos-1,1);query(1,1,n,res_min.pos+1,RR,2);Ans=A[1]+A[2];for(u32 i=1; i<=k; i++) Ans.val[k]*=i;printf("%u\n",Ans.val[k]);
}int main()
{scanf("%d%d",&n,&q);for(int i=1; i<=n; i++) scanf("%u",&a[i].d);for(int i=1; i<=n; i++) scanf("%u",&a[i].v);sort(a+1,a+n+1,cmp);build(1,1,n);while(q--){scanf("%u%u%u",&L.d,&R.d,&k);solve(k);}
}

【JZOJ A组】Melancholy相关推荐

  1. jzoj C组 2017.1.19 比赛

    第一题--小x的游戏 题目描述 Tac游戏在一个4*4的方格上进行.起先可能会在16个方格中出现一个标记'T',其余的方格是空着的.游戏有两个玩家,小x和小o.小x先开始,然后游戏轮流进行.每一步玩家 ...

  2. 【JZOJ A组】海明距离

    Description 对于二进制串a,b,他们之间的海明距离是指两个串异或之后串中1的个数.异或的规则为: 0 XOR 0 = 0 1 XOR 0 = 1 0 XOR 1 = 1 1 XOR 1 = ...

  3. 【JZOJ A组】昆特牌

    Description 作为一个资深OIer,你被邀请到位于波兰的CDPR总部参观.但没想到你刚一到就遇到了麻烦.昆特牌的数据库发生了故障.原本昆特牌中有 k种卡牌和n 种阵营,为了平衡,每个阵营拥有 ...

  4. 【JZOJ A组】黑暗之魂(darksoul)

    Description oi_juruo热爱一款名叫黑暗之魂的游戏.在这个游戏中玩家要操纵一名有 点生命值的无火的余灰在一张地图中探险.地图中有n个篝火(也就是存档点).在篝火处休息可以将生命值恢复满 ...

  5. 【JZOJ B组】【JSOI2013】吃货JYY

    Description 世界上一共有N个JYY愿意去的城市,分别从1编号到N.JYY选出了K个他一定要乘坐的航班.除此之外,还有M个JYY没有特别的偏好,可以乘坐也可以不乘坐的航班. 一个航班我们用一 ...

  6. 【JZOJ A组】排列

    Description 一个关于n个元素的排列是指一个从{1, 2, -, n}到{1, 2, -, n}的一一映射的函数.这个排列p的秩是指最小的k,使得对于所有的i = 1, 2, -, n,都有 ...

  7. 【JZOJ A组省选】词典

    Description Input 第一行两个数n,m,表示有n个字符串,m个询问. 接下来n行,每行一个字符串Ti . 再接下来m行,每行一个字符串Si . Output 对于每个询问,输出一个an ...

  8. JZOJ B组【GDKOI2014】壕壕的寒假作业

    题目: Input Output 输出n行.第i行输出两个整数,分别表示第i份作业最早完成的时刻以及最晚完成的时刻,两个整数之间以一个空格间隔. Sample Input 4 4 3 4 5 6 1 ...

  9. 【JZOJ B组】【NOIP2013模拟】小喵喵的新家

    Description 小喵喵和小聪聪从小就是好朋友 ,他们经常在一起玩耍 .如今小喵已经厌倦了自己居住的环境,想请小聪聪为她建一个新家. 小喵喵天生多才多艺,对多种乐器颇有研究.对于生活中常见的图形 ...

  10. 【JZOJ A组】凯旋而归

    Description Input 第一行一个整数 n,表示数的个数. 第二行n个整数,第i个整数为ai . Output n行一个整数表示答案,第i行表示序列第i个前缀的帅气值. Sample In ...

最新文章

  1. spring aop 注入源码解析
  2. 不想工作就想创业?我劝你看完这档综艺再决定
  3. 公用机房计算机主板选购,才知道,IDC机房运维工作居然可以如此简单!
  4. vscode控制字符引起的问题以及解决思路
  5. 一句话的设计模式(JAVA版)
  6. Python collections 模块中的 deque(队列)
  7. Ax 2012批量部署报表
  8. Java排序算法——选择排序(Selection Sort)
  9. Java设计模式--生成器模式
  10. 一步步学习微软InfoPath2010和SP2010--第十二章节--管理和监控InfoPath Form Services(IPFS)(3)--安装Fiddler并监控IPFS表单加载过程
  11. 文献阅读(SRCNN)
  12. 拆解洪恩教育2020年财报:Q4亏损扩大7倍,负债增至4亿元
  13. win8、server 2012 清除winsxs文件夹
  14. c语言中断函数作用,进一步理解中断函数
  15. Delphi中BeginUpdate和EndUpdate作用
  16. 微信小程序 MinUI 组件库系列之 price 价格组件
  17. 用计算机处理表格说课稿,《制作表格》说课稿
  18. Linux-vim编辑器
  19. win7 IIS Web.config节点锁定问题
  20. 遍地喧嚣的智能音箱战场,究竟谁能做出中国的 Echo?

热门文章

  1. 51单片机数码管显示历史键值
  2. Python爬虫——Scrapy框架爬取腾讯招聘
  3. [realview] warning: #550-D: variable d was set but never used
  4. 用poi 给word文档添加水印
  5. 计算机网络第一章概述
  6. 高数笔记(十九):对面积的曲面积分,对坐标的曲面积分,高斯公式,斯托克斯公式
  7. html js聊天对话源码,javascript实现简易聊天室
  8. 数据库服务器使用的RAID存储架构初步介绍
  9. 全球顶尖科创和商业巨头齐聚,巨杉数据库亮相2021CNBC全球科技大会
  10. 如何在EF中实现left join(左联接)查询