Description

LYK喜欢听音乐,它的歌单里共有n首音乐,而且它每次听音乐时都是连续地听m首,

它甚至能记得自己给每首音乐的评分ai。

现在它想选择一首歌开始听,使得接下来连续m首歌的评分<xi的歌最少。

当然它最开始听的歌也是需要在一段区间[li,ri]内选择的。

现在它想让你帮它挑选一首最开始听的歌,使得以这首歌开始的连续m首歌中,评分<xi的歌最少。

Input

第一行输入2个数n,m。

接下来一行n个数ai表示第i首歌的评分。

接下来一行一个Q,表示有Q次询问。

接下来Q行,每行3个数li,ri,qi。为了体现询问的在线性,对于该询问,xi=ans{i-1}^qi。

其中^表示异或,ans{i-1}表示上一问的答案,若i=1,则ans{i-1}=0。

n,Q<=200000。

1<=li<=ri<=n-m+1,0<=ai,qi<2^30,1<=m<=n

Output

Q行,表示评分<xi的歌最少是多少。

Solution:

我们发现m是固定的,考虑以这一点为突破口

我们先考虑离线怎么来做,对于所有询问的\(q_i\),我们先把它从小到大排序

考虑对于每一个点,当它有贡献时,他会影响的左端点是一段连续的区间\([max(1,i-m+1),i]\)

那么我们把\(a\)数组按从小到大排序,用线段树来维护这个贡献,每次操作即为区间加,区间最小值,时间复杂度\(O(n\,log \, n)\)

那么在线怎么做呢,事实上,如果是在线,那么我们建一颗主席树,预处理好操作,每次找到对应的\(rt\)查询即可

Code:

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+11;
int n,m,Q,cnt,lstans,rt[N];
struct Pos{int id,v;}a[N];
struct Seg{int l,r,t,v;}tr[N*50];
inline bool cmp(Pos x,Pos y){return x.v<y.v;}
#define ls tr[q].l
#define rs tr[q].r
#define Ls tr[p].l
#define Rs tr[p].r
void give(int q,int p){ls=Ls;rs=Rs;tr[q].t=tr[p].t;tr[q].v=tr[p].v;}
void update(int q){tr[q].v=tr[q].t+min(tr[ls].v,tr[rs].v);}
void ins(int &q,int p,int l,int r,int L,int R,int v){
if(r<L||l>R) return ;
q=++cnt;give(q,p);
int mid=l+r>>1;
if(l>=L&&r<=R) tr[q].t+=v;
else ins(ls,Ls,l,mid,L,R,v),ins(rs,Rs,mid+1,r,L,R,v);
update(q);
}
int query(int q,int l,int r,int L,int R){
if(l>=L&&r<=R) return tr[q].v;
int mid=l+r>>1,re=N;
if(mid>=L) re=min(re,query(ls,l,mid,L,R));
if(mid<R) re=min(re,query(rs,mid+1,r,L,R));
return tr[q].t+re;
}
int lower(int v){
int l=1,r=n,re=0;
while(l<=r){
int mid=l+r>>1;
if(a[mid].v<v) re=mid,l=mid+1;
else r=mid-1;
}return re;
}
int read(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;
}
signed main(){
n=read(),m=read();
for(int i=1;i<=n;i++) a[a[i].id=i].v=read();
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
ins(rt[i],rt[i-1],1,n,max(a[i].id-m+1,1),a[i].id,1);
int Q=read();
for(int i=1;i<=Q;i++){
int l=read(),r=read(),v=read();
v=v^lstans;int p=lower(v);
lstans=query(rt[p],1,n,l,r);
printf("%d\n",lstans);
}
return 0;
}

LYK loves music的更多相关文章

  1. LYK loves graph(graph)

    题目: LYK loves graph(graph) Time Limit:2000ms   Memory Limit:128MB LYK喜欢花花绿绿的图片,有一天它得到了一张彩色图片,这张图片可以看 ...

  2. 省选模拟赛 LYK loves rabbits(rabbits)

    题目描述 LYK喜欢兔子,它在家中养了3只兔子. 有一天,兔子不堪寂寞玩起了游戏,3只兔子排成一排,分别站在a,b,c这3个位置. 游戏的规则是这样的,重复以下步骤k次:选择两个不同的兔子A和B,假如 ...

  3. 省选模拟赛 LYK loves graph(graph)

    题目描述 LYK喜欢花花绿绿的图片,有一天它得到了一张彩色图片,这张图片可以看做是一张n*m的网格图,每个格子都有一种颜色去染着,我们用-1至n*m-1来表示一个格子的颜色.特别地,-1代表这个颜色是 ...

  4. 省选模拟赛 LYK loves string(string)

    题目描述 LYK喜欢字符串,它认为一个长度为n的字符串一定会有n*(n+1)/2个子串,但是这些子串是不一定全部都不同的,也就是说,不相同的子串可能没有那么多个.LYK认为,两个字符串不同当且仅当它们 ...

  5. 清北集训Day1T3 LYK loves jumping(期望DP)

    题目描述 LYK在玩一个魔法游戏,叫做跳跃魔法. 有n个点,每个点有两个属性hi和ti,表示初始高度,和下降高度.也就是说,它初始时高度为hi,一旦LYK踩在这个点上,由于重力的影响,这个点的高度会下 ...

  6. Microsoft Loves Linux

    微软新任CEO纳德拉提出的“Microsoft Loves Linux”,并且微软宣布.NET框架的开源,近期Microsoft不但宣布了Linux平台的SQL Server,还宣布了Microsof ...

  7. 5806 NanoApe Loves Sequence Ⅱ(尺取法)

    传送门 NanoApe Loves Sequence Ⅱ Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/131072 K ...

  8. 5805 NanoApe Loves Sequence(想法题)

    传送门 NanoApe Loves Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/131072 K ( ...

  9. CF444C. DZY Loves Colors[线段树 区间]

    C. DZY Loves Colors time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

随机推荐

  1. T100 —— 凭证打印时排序

    capr110_g01,按扣账日期打印排序: 在adzp188——“字段”中加入pmds001的话,产生的代码的变量是:pmds_t_pmds001 :当在“群组”—“印出排序” 再添加pmds001 ...

  2. Springboot使用javaMail进行邮件发送

    导入相关依赖 <!--邮件发送--> <dependency> <groupId>javax.mail</groupId> <artifactId ...

  3. PMP - 风险识别之风险登记册

    目录 PMP - 风险识别之风险登记册 1. 风险登记册 1.1 已识别风险的清单 1.2 潜在风险责任人 1.3 潜在风险应对措施清单 2. 相关习题 2.1 风险发生的时候,要实施 风险登记册 上 ...

  4. 【weixin】微信h5支付

    一.使用场景 H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付. 主要用于触屏版的手机浏览器请求微信支付的场景.可以方便 ...

  5. O047、 Cinder 组件详解

    参考https://www.cnblogs.com/CloudMan6/p/5585637.html   cinder-api   cinder-api 是整个Cinder 组件的门户,所有cinde ...

  6. 深入探讨java的类加载器

    类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一.它使得 Java 类可以被动态加载到 Java 虚拟机中并执行.类加载器从 JDK 1.0 就出现了,最初是为了满足 Ja ...

  7. java ftp retrieveFile 较大文件丢失内容

    今天发现用  如下方法下载一个2.2M的zip文件但是只下载了500K没有下载完全,但是方法  返回的却是true boolean org.apache.commons.net.ftp.FTPClie ...

  8. vue源码分析

    1.new Vue的过程 1)首先Vue是一个类,初始化时已经添加很多 initMixin(Vue)             给原型添加Vue.prototype._init  stateMixin( ...

  9. spring ioc aop 理解

    OC,依赖倒置的意思,所谓依赖,从程序的角度看,就是比如A要调用B的方法,那么A就依赖于B,反正A要用到B,则A依赖于B.所谓倒置,你必须理解如果不倒置,会怎么着,因为A必须要有B,才可以调用B,如果 ...

  10. vue-element-admin 多层路由问题

    在二级页面上添加<router-view> 关于页面打包后三级路由无法访问问题 需要将 存放router-view 的页面单独存放一个文件夹 router.js 写法