【JZOJ A组】Melancholy
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相关推荐
- jzoj C组 2017.1.19 比赛
第一题--小x的游戏 题目描述 Tac游戏在一个4*4的方格上进行.起先可能会在16个方格中出现一个标记'T',其余的方格是空着的.游戏有两个玩家,小x和小o.小x先开始,然后游戏轮流进行.每一步玩家 ...
- 【JZOJ A组】海明距离
Description 对于二进制串a,b,他们之间的海明距离是指两个串异或之后串中1的个数.异或的规则为: 0 XOR 0 = 0 1 XOR 0 = 1 0 XOR 1 = 1 1 XOR 1 = ...
- 【JZOJ A组】昆特牌
Description 作为一个资深OIer,你被邀请到位于波兰的CDPR总部参观.但没想到你刚一到就遇到了麻烦.昆特牌的数据库发生了故障.原本昆特牌中有 k种卡牌和n 种阵营,为了平衡,每个阵营拥有 ...
- 【JZOJ A组】黑暗之魂(darksoul)
Description oi_juruo热爱一款名叫黑暗之魂的游戏.在这个游戏中玩家要操纵一名有 点生命值的无火的余灰在一张地图中探险.地图中有n个篝火(也就是存档点).在篝火处休息可以将生命值恢复满 ...
- 【JZOJ B组】【JSOI2013】吃货JYY
Description 世界上一共有N个JYY愿意去的城市,分别从1编号到N.JYY选出了K个他一定要乘坐的航班.除此之外,还有M个JYY没有特别的偏好,可以乘坐也可以不乘坐的航班. 一个航班我们用一 ...
- 【JZOJ A组】排列
Description 一个关于n个元素的排列是指一个从{1, 2, -, n}到{1, 2, -, n}的一一映射的函数.这个排列p的秩是指最小的k,使得对于所有的i = 1, 2, -, n,都有 ...
- 【JZOJ A组省选】词典
Description Input 第一行两个数n,m,表示有n个字符串,m个询问. 接下来n行,每行一个字符串Ti . 再接下来m行,每行一个字符串Si . Output 对于每个询问,输出一个an ...
- JZOJ B组【GDKOI2014】壕壕的寒假作业
题目: Input Output 输出n行.第i行输出两个整数,分别表示第i份作业最早完成的时刻以及最晚完成的时刻,两个整数之间以一个空格间隔. Sample Input 4 4 3 4 5 6 1 ...
- 【JZOJ B组】【NOIP2013模拟】小喵喵的新家
Description 小喵喵和小聪聪从小就是好朋友 ,他们经常在一起玩耍 .如今小喵已经厌倦了自己居住的环境,想请小聪聪为她建一个新家. 小喵喵天生多才多艺,对多种乐器颇有研究.对于生活中常见的图形 ...
- 【JZOJ A组】凯旋而归
Description Input 第一行一个整数 n,表示数的个数. 第二行n个整数,第i个整数为ai . Output n行一个整数表示答案,第i行表示序列第i个前缀的帅气值. Sample In ...
最新文章
- spring aop 注入源码解析
- 不想工作就想创业?我劝你看完这档综艺再决定
- 公用机房计算机主板选购,才知道,IDC机房运维工作居然可以如此简单!
- vscode控制字符引起的问题以及解决思路
- 一句话的设计模式(JAVA版)
- Python collections 模块中的 deque(队列)
- Ax 2012批量部署报表
- Java排序算法——选择排序(Selection Sort)
- Java设计模式--生成器模式
- 一步步学习微软InfoPath2010和SP2010--第十二章节--管理和监控InfoPath Form Services(IPFS)(3)--安装Fiddler并监控IPFS表单加载过程
- 文献阅读(SRCNN)
- 拆解洪恩教育2020年财报:Q4亏损扩大7倍,负债增至4亿元
- win8、server 2012 清除winsxs文件夹
- c语言中断函数作用,进一步理解中断函数
- Delphi中BeginUpdate和EndUpdate作用
- 微信小程序 MinUI 组件库系列之 price 价格组件
- 用计算机处理表格说课稿,《制作表格》说课稿
- Linux-vim编辑器
- win7 IIS Web.config节点锁定问题
- 遍地喧嚣的智能音箱战场,究竟谁能做出中国的 Echo?
热门文章
- 51单片机数码管显示历史键值
- Python爬虫——Scrapy框架爬取腾讯招聘
- [realview] warning: #550-D: variable d was set but never used
- 用poi 给word文档添加水印
- 计算机网络第一章概述
- 高数笔记(十九):对面积的曲面积分,对坐标的曲面积分,高斯公式,斯托克斯公式
- html js聊天对话源码,javascript实现简易聊天室
- 数据库服务器使用的RAID存储架构初步介绍
- 全球顶尖科创和商业巨头齐聚,巨杉数据库亮相2021CNBC全球科技大会
- 如何在EF中实现left join(左联接)查询