$A$类数据:直接输出$B[l]$,$O(n+m)$。
$B$类数据:ST表求区间最小值,$O(n\log n+m)$。
$C$类数据:可持久线段树求区间$k$小值,$O((n+m)\log n)$。
剩下的数据先用可持久线段树求出$a,b$的实际值,转化为矩形内$B$值的询问。
$D$类数据:即求矩形$B$最小值,对序列分治,对于序列$[l,r]$,用扫描线+线段树处理所有经过$mid$的询问,$O(n\log^2n+m\log n)$。
$E,F$类数据:即求矩形$B$第$k$小值,可持久化线段树套权值线段树即可,$O((n+m)\log^2n)$。

#include<cstdio>
const int N=30010,M=N*18,BUF=30000000,OUT=10000000;
char Buf[BUF],*buf=Buf,Out[OUT],*ou=Out;int Outn[30],Outcnt;
inline void write(int x){
if(!x)*ou++=48;
else{
for(Outcnt=0;x;x/=10)Outn[++Outcnt]=x%10+48;
while(Outcnt)*ou++=Outn[Outcnt--];
}
}
inline void writeln(int x){write(x);*ou++='\n';}
inline void read(int&a){for(a=0;*buf<48;buf++);while(*buf>47)a=a*10+*buf++-48;}
inline int readstr(char*a){
int n=0;
while(*buf<33)buf++;while(*buf>32)*a++=*buf++,n++;
return n;
}
int n,m,e,i,j,l,r,c,d,k,a[N],b[N],last,v[M],sl[M],sr[M],tot,T[N];char type[9];
namespace SubA{
void Main(){
while(m--)read(l),read(r),read(c),read(d),read(k),writeln(b[l]);
}
}
int ins(int x,int a,int b,int c){
int y=++tot;
v[y]=v[x]+1;
if(a==b)return y;
int mid=(a+b)>>1;
if(c<=mid)sl[y]=ins(sl[x],a,mid,c),sr[y]=sr[x];
else sl[y]=sl[x],sr[y]=ins(sr[x],mid+1,b,c);
return y;
}
int kth(int x,int y,int k){
int a=1,b=n,mid,t;
while(a<b){
mid=(a+b)>>1;
t=v[sl[x]]-v[sl[y]];
if(k<=t)b=mid,x=sl[x],y=sl[y];else k-=t,a=mid+1,x=sr[x],y=sr[y];
}
return a;
}
namespace SubB{
int Log[N],f[20][N];
inline int min(int a,int b){return a<b?a:b;}
inline int ask(int l,int r){
int k=Log[r-l+1];
return min(f[k][l],f[k][r-(1<<k)+1]);
}
void Main(){
for(i=2;i<=n;i++)Log[i]=Log[i>>1]+1;
for(i=1;i<=n;i++)f[0][i]=a[i];
for(j=1;j<=Log[n];j++)for(i=1;i+(1<<j)-1<=n;i++)f[j][i]=min(f[j-1][i],f[j-1][i+(1<<(j-1))]);
while(m--){
read(l),read(r),read(c),read(d),read(k);
writeln(ask(l,r));
}
}
}
namespace SubC{
void Main(){
while(m--){
read(l),read(r),read(c),read(d),read(k);
writeln(kth(T[r],T[l-1],c));
}
}
}
namespace SubD{
const int MAXQ=500010;
struct E{int l,r,a,b,ans;}q[MAXQ];
int pool[N],cnt[N],v[MAXQ<<1],val[70000],M;
inline void up(int&a,int b){a>b?(a=b):0;}
inline int ask(int x,int y){
int t=N;
for(x+=M-1,y+=M+1;x^y^1;x>>=1,y>>=1){
if(~x&1)up(t,val[x^1]);
if(y&1)up(t,val[y^1]);
}
return t;
}
inline void change(int x,int y){for(x+=M;x;x>>=1)up(val[x],y);}
inline void clear(int x){for(x+=M;x;x>>=1)val[x]=N;}
void build(int n){
for(M=1;M<n+2;M<<=1);
int i;
for(i=1;i<=n;i++)v[i+M]=a[i];
for(i=M-1;i;i--)v[i]=v[i<<1]+v[i<<1|1];
}
void solve(int l,int r){
if(l>r)return;
int i,j,k,mid=(l+r)>>1;
solve(l,mid-1),solve(mid+1,r);
for(i=mid;i>=l;i--){
change(a[i],b[i]);
for(j=cnt[i];j>cnt[i-1];j--){
k=v[j];
if(q[k].l<=mid&&q[k].r>=mid&&q[k].l>=l&&q[k].r<=r)up(q[k].ans,ask(q[k].a,q[k].b));
}
}
for(i=mid;i>=l;i--)clear(a[i]);
for(i=mid;i<=r;i++){
change(a[i],b[i]);
for(j=cnt[i];j>cnt[i-1];j--){
k=v[j];
if(q[k].l<=mid&&q[k].r>=mid&&q[k].l>=l&&q[k].r<=r)up(q[k].ans,ask(q[k].a,q[k].b));
}
}
for(i=mid;i<=r;i++)clear(a[i]);
}
void Main(){
for(i=1;i<=m;i++){
read(l),read(r),read(c),read(d),read(k);
c=kth(T[r],T[l-1],c);
d=kth(T[r],T[l-1],d);
q[i].l=l,q[i].r=r,q[i].a=c,q[i].b=d,q[i].ans=N;
cnt[l]++,cnt[r]++;
}
for(i=1;i<=n;i++)cnt[i]+=cnt[i-1];
for(i=1;i<=n;i++)pool[i]=cnt[i];
for(i=1;i<=m;i++)v[pool[q[i].l]--]=i,v[pool[q[i].r]--]=i;
for(M=1;M<n+2;M<<=1);
for(i=1;i<=n+M;i++)val[i]=N;
solve(1,n);
for(i=1;i<=m;i++)writeln(q[i].ans);
}
}
namespace SubF{
const int MAXN=9720000;
int sonl[M],sonr[M],id[M],root[N],tot;
int L[MAXN],R[MAXN],V[MAXN],TOT;
int q[N][2],cnt;
int INS(int x,int a,int b,int c){
int y=++TOT;
V[y]=V[x]+1;
if(a==b)return y;
int mid=(a+b)>>1;
if(c<=mid)L[y]=INS(L[x],a,mid,c),R[y]=R[x];else L[y]=L[x],R[y]=INS(R[x],mid+1,b,c);
return y;
}
int ins(int x,int a,int b,int c,int d){
int y=++tot;
id[y]=INS(id[x],0,n,d);
if(a==b)return y;
int mid=(a+b)>>1;
if(c<=mid)sonl[y]=ins(sonl[x],a,mid,c,d),sonr[y]=sonr[x];
else sonl[y]=sonl[x],sonr[y]=ins(sonr[x],mid+1,b,c,d);
return y;
}
void ask(int x,int y,int a,int b,int c,int d){
if(c<=a&&b<=d){
q[++cnt][0]=id[x];
q[cnt][1]=id[y];
return;
}
int mid=(a+b)>>1;
if(c<=mid)ask(sonl[x],sonl[y],a,mid,c,d);
if(d>mid)ask(sonr[x],sonr[y],mid+1,b,c,d);
}
inline int query(int x,int y,int l,int r,int k){
cnt=0;
ask(x,y,1,n,l,r);
int a=0,b=n,mid,t,i;
while(a<b){
mid=(a+b)>>1;
t=0;
for(i=1;i<=cnt;i++)t+=V[L[q[i][0]]]-V[L[q[i][1]]];
if(k<=t){
b=mid;
for(i=1;i<=cnt;i++)q[i][0]=L[q[i][0]],q[i][1]=L[q[i][1]];
}else{
k-=t,a=mid+1;
for(i=1;i<=cnt;i++)q[i][0]=R[q[i][0]],q[i][1]=R[q[i][1]];
}
}
return a;
}
void Main(){
for(i=1;i<=n;i++)root[i]=ins(root[i-1],1,n,a[i],b[i]);
while(m--){
read(l),read(r),read(c),read(d),read(k);
k=(k-1+e*last)%(d-c+1)+1;
c=kth(T[r],T[l-1],c);
d=kth(T[r],T[l-1],d);
last=query(root[r],root[l-1],c,d,k);
writeln(last);
}
}
}
int main(){
fread(Buf,1,BUF,stdin);
readstr(type);
read(n);
for(i=1;i<=n;i++)read(a[i]);
for(i=1;i<=n;i++)read(b[i]);
read(m),read(e);
if(type[0]=='A')SubA::Main();
else if(type[0]=='B')SubB::Main();
else{
for(i=1;i<=n;i++)T[i]=ins(T[i-1],1,n,a[i]);
if(type[0]=='C')SubC::Main();
else if(type[0]=='D')SubD::Main();
else SubF::Main();
}
fwrite(Out,1,ou-Out,stdout);
return 0;
}

  

BZOJ2872 : 优莱卡的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. 46张PPT讲述JVM体系结构、GC算法和调优

    本PPT从JVM体系结构概述.GC算法.Hotspot内存管理.Hotspot垃圾回收器.调优和监控工具六大方面进行讲述.(内嵌iframe,建议使用电脑浏览) 好东西当然要分享,PPT已上传可供下载 ...

  3. 【腾讯优测干货分享】安卓专项测试之GPU测试探索

    本文来自于Dev Club 开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57c7ffdc0569a1191bce8a63 作者:章未哲——腾讯SNG质 ...

  4. 【腾讯优测干货分享】如何降低App的待机内存(四)——进阶:内存原理

    本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/3FTPFvZRqyAQnU047kmWJQ 1.4进阶:内存原理 在 ...

  5. 【腾讯优测干货分享】如何降低App的待机内存(三)——探索内存增长的原因

    本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/8BiKIt3frq9Yv9KV5FXlGw 1.3新问题的进一步挖 ...

  6. 【腾讯优测干货分享】如何降低App的待机内存(二)——规范测试流程及常见问题

    本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/806TiugiSJvFI7fH6eVA5w 作者:腾讯TMQ专项测 ...

  7. 《深入理解Java虚拟机》调优案例分析与实战

    上节学习回顾 在上一节当中,主要学习了Sun JDK的一些命令行和可视化性能监控工具的具体使用,但性能分析的重点还是在解决问题的思路上面,没有好的思路,再好的工具也无补于事. 本节学习重点 在书本上本 ...

  8. Spark Shuffle原理、Shuffle操作问题解决和参数调优

    摘要: 1 shuffle原理 1.1 mapreduce的shuffle原理 1.1.1 map task端操作 1.1.2 reduce task端操作 1.2 spark现在的SortShuff ...

  9. 搭建 windows(7)下Xgboost(0.4)环境 (python,java)以及使用介绍及参数调优

    摘要: 1.所需工具 2.详细过程 3.验证 4.使用指南 5.参数调优 内容: 1.所需工具 我用到了git(内含git bash),Visual Studio 2012(10及以上就可以),xgb ...

随机推荐

  1. 无废话-API-01

    说明 我的开发环境:VS2013 浏览器:谷歌浏览器(Google Chrome) 1创建项目 1.1添加一个 应用程序"ASP.NET MVC 4 Web 应用程序"  1.2选 ...

  2. 常见的User-Agent及免费代理IP网站

    常见的User-Agent 1.Android Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 ...

  3. 金蝶k3完全卸载,注册表手动清理

    HKEY_LOCAL_MACHINE\SOFTWARE\KINGDEE 如果操作系统是64位的,在注册表目录:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node下面还有一个 ...

  4. SQL Server等待

    等待大概分为3类:资源等待.队列等待.外部等待 过滤掉系统相关的等待类型的语句.(查看常用的等待信息) SELECT wait_type , signal_wait_time_ms , wait_ti ...

  5. 【C++ Primer | 15】访问控制与继承、继承中的类作用域

    1. 只有D继承B的方式是public时,用户代码才能使用派生类向基类的转换:如果D继承B的方式是受保护的或者私有的,则用户代码不能使用该转换. 2. 不论D以什么方式继承B,D的成员函数和友员函数都 ...

  6. C# 操作windows服务[启动、停止、卸载、安装]

    主要宗旨:不已命令形式操作windows服务 static void Main(string[] args) { var path = @"E:\开发辅助项目\WCF\WCF.Test\WC ...

  7. Hadoop ConnectException: Connection refused的一种解决办法

    跟着视频学习天气案例,把代码敲好,准备提交运行时才发现集群没启动.然后在node02.node03.node04使用zkServer.sh start启动ZooKeeper,然后在node01使用st ...

  8. ipmitool获取服务器信息

    https://www.annhe.net/article-2987.html https://blog.csdn.net/wolovexiexiongfei/article/details/8270 ...

  9. ssh-keygen -t rsa 生成密钥对后如何校验

    ssh-keygen -t rsa 生成密钥对后如何校验一下呢ssh-keygen -y -f id_rsa > id_rsa.pub.tobecompared 然后对比一下id_rsa.pub ...

  10. 【BZOJ3252】攻略

    题解: 首先贪心的会发现我们每次一定会选当前权值和最大的那个 然后在于怎么维护这个最大值 我们发现每个修改实际上是对沿途所有点的子树的修改 所以用线段树维护就可以了.. 另外注意有重复部分,但一定是包 ...