题目大意:给出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(磨懒虫主义)的更多相关文章

  1. HIFI播放器--磨机吐槽篇

    最近看到淘宝店提供各种随身播放器磨机服务,说的是天花乱坠,给你更换零件, 甚至更改电路,搭载上去,是如何如何的好,整个播放器就上升了几个等次,收费还 不低,至少是好几百,我实在是忍不住吐槽了,你们这些 ...

  2. 高龄“潮男”优衣库老板柳井正_榜样_奢华主义_YOKA时尚网

    高龄"潮男"优衣库老板柳井正_榜样_奢华主义_YOKA时尚网 高龄"潮男"优衣库老板柳井正

  3. python中multiprocessing.pool函数介绍_正在拉磨_新浪博客

    python中multiprocessing.pool函数介绍_正在拉磨_新浪博客     python中multiprocessing.pool函数介绍    (2010-06-10 03:46:5 ...

  4. 作为一个懒虫,如何优雅的使用windows

    懒虫windows系列(一) 首先是快捷键,因为自己太懒了,觉得用鼠标很麻烦,下面总结一下自己最常用的快捷键(windows10 ) Ctrl+Shift+N:新建文件夹 F2:重命名 Ctrl + ...

  5. 磨人的Fragment的转换

    磨人的Fragment的转换 本次任务是 程序运行之后将第一个Fragment加载出来 然后点击"SHOW NEXT PAGE"切换到第二个Fragment 当再次点击按钮时下方出 ...

  6. 如何用ABP框架快速完成项目(9) - 用ABP一个人快速完成项目(5) - 不要执着于设计模式和DDD理论,避免原教旨主义

    为什么要写这节文章呢?   首先主动看我这系列文章和参加活动课程的同学, 肯定是积极好学的. 所以很大概率是学过设计模式和DDD理论的. 很大概率不是走一点都不懂设计模式和DDD理论这个极端, 而是走 ...

  7. .NET开源项目 QuarkDoc 一款自带极简主义属性的文档管理系统

    有些话说在前头 因为公司产品业务重构且功能拆分组件化,往后会有很多的接口文档需要留存,所以急需一款文档管理系统.当时选型要求3点: 1.不能是云平台上的Saas服务,整个系统都要在自己公司部署维护(数 ...

  8. Vim 利剑常磨,见血封喉

    年底了,故事总是会有很多. 刚了一波通宵加班,趁着有时间,过了一遍Vim教程,顺便汇总下常用命令. 对于以 OSX / Linux为开发环境的伙伴们,应该并不陌生.因其轻便,扩展性,可定制化,一直很受 ...

  9. JavaScript学习总结(十三)——极简主义法编写JavaScript类

    前两天在网上无意中发现了一篇使用极简主义法定义JavaScript类的文章,原文链接,这个所谓的"极简主义法"我还是第一次听说,是荷兰程序员Gabor de Mooij提出来的,这 ...

随机推荐

  1. SCUT - 240 - 宝华的文件系统 - 模拟

    https://scut.online/p/240 就是要小心绝对路径中也有.和..出现. #include<bits/stdc++.h> using namespace std; #de ...

  2. 洛谷P2219 [HAOI2007]修筑绿化带(单调队列)

    传送门 啧……明明以前做到过这种类型的题结果全忘了…… 这种矩阵的,一般都是先枚举行,然后对列进行一遍单调队列,搞出右下角在每一行中合法位置时的最小权值 再枚举列,对行做一遍单调队列,用之前搞出来的最 ...

  3. 如何通过Gitalk评论插件,5分钟为你的博客快速集成评论功能

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 高级架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

  4. Win10各个版本免费激活密钥

      专业版:W269N-WFGWX-YVC9B-4J6C9-T83GX 企业版:NPPR9-FWDCX-D2C8J-H872K-2YT43 家庭版:TX9XD-98N7V-6WMQ6-BX7FG-H8 ...

  5. Jquery | 基础 | 属性过滤选择器

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. Caffe实战三(依赖包解析及环境配置)

    前面的文章使用的软件环境是开始时通过apt-get命令所安装的,本文将通过编译源码的方式重新配置一个可迁移的软件环境.(参考:<深度学习 21天实战Caffe> 第五天 Caffe依赖包解 ...

  7. Qt样式表之三:实现按钮三态效果的三种方法

    按钮的三态,指的是普通态.鼠标的悬停态.按下态.Qt中如果使用的是默认按钮,三态的效果是有的,鼠标放上去会变色,点击的时候有凹陷的效果. 但是如果自定义按钮实现三态效果有三种方法,一种是设置背景图,主 ...

  8. adb shell报错:error: insufficient permissions for device的解决办法

    1.错误描述 执行 adb shell 时,报错如下; error: insufficient permissions for device  2.解决办法 1,终端执行 lsusb 结果如下,注意绿 ...

  9. 转-sql之left join、right join、inner join的区别

    left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) 只 ...

  10. FFmpegUtil

    这几天没事研究音频玩 比如 X配音app的配音功能 录一段 pcm或者wav格式的文件 替换mp4指定位置的音频刚开始卡在 pcm混合以及pcm指定位置插入.思路 一段段的视频进行切割 用到MP4Co ...