Melancholy(磨懒虫主义)
题目大意:给出n个地点和q个询问。其中每个地点有距离和权值,每个询问给出l,r,k,表示在[l,r]区间内不取最小点的情况下任取k个,求所有情况权值之积之和(n,q<=1e5,k<=6)。
能看出来是区间操作,先考虑树状数组,发现维护比较难。于是用线段树维护。
每个节点记录7个值,分别为minv和不算minv任取1~6个所得值。dalao的正解用了RMQ+容斥,但我都没用。
#include<cstdio>
#include<algorithm>
using namespace std;
#define N 100050
#define ui unsigned int
int n,Q;
struct pla
{
int d,v;
}p[N];
bool cmp(pla a,pla b)
{
return a.d<b.d;
}
struct segtree
{
ui mn;
ui v[];
}tr[*N];
segtree operator * (segtree s0,segtree s1)
{
segtree ret;
for(int i=;i<=;i++)
{
ret.v[i]=s0.v[i]+s1.v[i];
for(int j=;j<i;j++)ret.v[i]+=s0.v[j]*s1.v[i-j];
}
ret.mn = min(s0.mn,s1.mn);
ui mx = max(s0.mn,s1.mn);
for(int i=;i>=;i--)
{
ret.v[i]+=ret.v[i-]*mx;
}
ret.v[]+=mx;
return ret;
}
void update(int u)
{
tr[u] = tr[u<<] * tr[u<<|];
}
void build(int l,int r,int u)
{
if(l==r)
{
tr[u].mn=(ui)p[l].v;
return ;
}
int mid = (l+r)>>;
build(l,mid,u<<);
build(mid+,r,u<<|);
update(u);
}
segtree query(int l,int r,int u,int ql,int qr)
{
if(l==ql&&r==qr)return tr[u];
int mid = (l+r)>>;
if(ql>mid)return query(mid+,r,u<<|,ql,qr);
else if(qr<=mid) return query(l,mid,u<<,ql,qr);
else
{
segtree s0=query(l,mid,u<<,ql,mid);
segtree s1=query(mid+,r,u<<|,mid+,qr);
segtree ret = s0 * s1;
return ret;
}
}
ui jc[];
int mi[];
int findl(int d)
{
int a = n;
for(int i=;i>=;i--)
{
if(a-mi[i]<=)continue;
if(p[a-mi[i]].d>=d)a-=mi[i];
}
return a;
}
int findr(int d)
{
int a = ;
for(int i=;i>=;i--)
{
if(a+mi[i]>n)continue;
if(p[a+mi[i]].d<=d)a+=mi[i];
}
return a;
}
int main()
{
// freopen("c.in","r",stdin);
// freopen("c.out","w",stdout);
scanf("%d%d",&n,&Q);
jc[]=,jc[]=,jc[]=,jc[]=,jc[]=,jc[]=;
mi[]=;
for(int i=;i<=;i++)mi[i]=mi[i-]<<;
for(int i=;i<=n;i++)scanf("%d",&p[i].d);
for(int i=;i<=n;i++)scanf("%d",&p[i].v);
sort(p+,p++n,cmp);
build(,n,);
for(int ll,rr,l,r,k,i=;i<=Q;i++)
{
scanf("%d%d%d",&ll,&rr,&k);
l = findl(ll);
r = findr(rr);
if(l>r)
{
printf("0\n");
continue;
}
segtree ans;
ans = query(,n,,l,r);
printf("%u\n",ans.v[k]*jc[k]);
}
fclose(stdin);
fclose(stdout);
return ;
}
Melancholy(磨懒虫主义)的更多相关文章
- HIFI播放器--磨机吐槽篇
最近看到淘宝店提供各种随身播放器磨机服务,说的是天花乱坠,给你更换零件, 甚至更改电路,搭载上去,是如何如何的好,整个播放器就上升了几个等次,收费还 不低,至少是好几百,我实在是忍不住吐槽了,你们这些 ...
- 高龄“潮男”优衣库老板柳井正_榜样_奢华主义_YOKA时尚网
高龄"潮男"优衣库老板柳井正_榜样_奢华主义_YOKA时尚网 高龄"潮男"优衣库老板柳井正
- python中multiprocessing.pool函数介绍_正在拉磨_新浪博客
python中multiprocessing.pool函数介绍_正在拉磨_新浪博客 python中multiprocessing.pool函数介绍 (2010-06-10 03:46:5 ...
- 作为一个懒虫,如何优雅的使用windows
懒虫windows系列(一) 首先是快捷键,因为自己太懒了,觉得用鼠标很麻烦,下面总结一下自己最常用的快捷键(windows10 ) Ctrl+Shift+N:新建文件夹 F2:重命名 Ctrl + ...
- 磨人的Fragment的转换
磨人的Fragment的转换 本次任务是 程序运行之后将第一个Fragment加载出来 然后点击"SHOW NEXT PAGE"切换到第二个Fragment 当再次点击按钮时下方出 ...
- 如何用ABP框架快速完成项目(9) - 用ABP一个人快速完成项目(5) - 不要执着于设计模式和DDD理论,避免原教旨主义
为什么要写这节文章呢? 首先主动看我这系列文章和参加活动课程的同学, 肯定是积极好学的. 所以很大概率是学过设计模式和DDD理论的. 很大概率不是走一点都不懂设计模式和DDD理论这个极端, 而是走 ...
- .NET开源项目 QuarkDoc 一款自带极简主义属性的文档管理系统
有些话说在前头 因为公司产品业务重构且功能拆分组件化,往后会有很多的接口文档需要留存,所以急需一款文档管理系统.当时选型要求3点: 1.不能是云平台上的Saas服务,整个系统都要在自己公司部署维护(数 ...
- Vim 利剑常磨,见血封喉
年底了,故事总是会有很多. 刚了一波通宵加班,趁着有时间,过了一遍Vim教程,顺便汇总下常用命令. 对于以 OSX / Linux为开发环境的伙伴们,应该并不陌生.因其轻便,扩展性,可定制化,一直很受 ...
- JavaScript学习总结(十三)——极简主义法编写JavaScript类
前两天在网上无意中发现了一篇使用极简主义法定义JavaScript类的文章,原文链接,这个所谓的"极简主义法"我还是第一次听说,是荷兰程序员Gabor de Mooij提出来的,这 ...
随机推荐
- bzoj4145 [AMPPZ2014]The Prices(状压dp)
Description 你要购买m种物品各一件,一共有n家商店,你到第i家商店的路费为d[i],在第i家商店购买第j种物品的费用为c[i][j], 求最小总费用. Input 第一行包含两个正整数n, ...
- 【杂谈】5G有啥用?跟咱有关系么?关注那玩意儿干啥?
用处大了 有啥用? 云计算啊,你看看你电脑都卡成啥了? 既然5G速度赶上本地读取,那就相当于把硬盘放云端没问题了.那么,看看自己硬盘里都有啥,5G的用处或许就能一点点浮现出来了. ——请不要急着打开一 ...
- Apereo CAS Server服务端搭建教程
不说废话了,直接看搭建过程吧. 首先到下载源码,https://github.com/apereo/cas-overlay-template/tree/4.2 附上地址,本次版本为4.2,下载源码后如 ...
- sybase修改默认字符集为cp936
原文地址:http://blog.sina.com.cn/s/blog_4d6854860100xn3f.html 报错信息:2402 error converting characters into ...
- SpringBoot | 教程
Spring Boot 2.0(一):[重磅]Spring Boot 2.0权威发布 Spring Boot 2.0(二):Spring Boot 2.0尝鲜-动态 Banner Spring Boo ...
- 127 Word Ladder 单词接龙
给出两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列,转换需遵循如下规则: 每次只能改变一个字母. 变换过程中的 ...
- P3742 umi的函数
题目背景 umi 找到了一个神秘的函数 f. 题目描述 这个函数接受两个字符串 s1,s2.这些字符串只能由小写字母组成,并且具有相同的长度.这个函数的输出是另一个长度与 s1,s2 相同的字符串 g ...
- requirejs&&springboot
1.Spring Boot Spring boot 基础结构主要有三个文件夹: (1)src/main/java 程序开发以及主程序入口 (2)src/main/resources 配置文件 (3) ...
- Bootstrap基本理论
Bootstrap,来自 Twitter,是目前最受欢迎的前段框架.Bootstrap是基于HTML.CSS.JAVASCRIPT的,它简洁灵活,使得Web开发更加快捷 Bootstrap特点:优雅, ...
- HTML的历史与历史遗留问题
1. <style type="text/css"> 从前,HTML的设计者认为以后应该还会有其他样式,不过如今我们已经醒悟,事实表明,完全可以只使用<style ...