博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ5177 : [Jsoi2013]贪心的导游
阅读量:6654 次
发布时间:2019-06-25

本文共 1461 字,大约阅读时间需要 4 分钟。

首先预处理出对于每个模数,所有被模数按结果从大到小排序的结果,那么对于一个询问,如果可以在$O(1)$时间内判断某个数字是否出现,则可以$O(1000)$回答。

考虑对序列进行分治,对于区间$[l,r]$,取$mid=\lfloor\frac{l+r}{2}\rfloor$。

处理出$mid$到$[l,r]$内每个位置里每个数字的出现次数,回答所有经过$mid$的询问,然后递归分治$[l,mid)$和$(mid,r]$。

时间复杂度$O((n+m)\log n+1000m)$。

 

#include
#include
using namespace std;const int N=1000010,M=50010,K=1010,BUF=9000000;char Buf[BUF],*buf=Buf;inline void read(int&a){for(a=0;*buf<48;buf++);while(*buf>47)a=a*10+*buf++-48;}int n,m,i,j,x,y,a[N],gl[N],gr[N],v[M<<1],nxt[M<<1],ed,b[K],q[K][K];bool c[K];struct E{int x,y,p,l,r;}e[M];inline bool cmp(int x,int y){return b[x]>b[y];}inline void add(int&x,int y){v[++ed]=y;nxt[ed]=x;x=ed;}inline void check(int x,int l,int r,int&y){ if(~y||e[x].x>l||e[x].y
r)return; int mid=(l+r)>>1,i,j; for(i=mid;i>=l;i--)for(c[a[i]]=1,j=gl[i];j;j=nxt[j])check(v[j],i,mid,e[v[j]].l); for(i=mid;i>=l;i--)c[a[i]]=0; for(i=mid;i<=r;i++)for(c[a[i]]=1,j=gr[i];j;j=nxt[j])check(v[j],mid,i,e[v[j]].r); for(i=mid;i<=r;i++)c[a[i]]=0; solve(l,mid-1),solve(mid+1,r);}int main(){ fread(Buf,1,BUF,stdin);read(n),read(m); for(i=1;i<=n;i++)read(a[i]); for(i=1;i<=m;i++){ read(x),read(y); if(x>y)swap(x,y); add(gl[e[i].x=x+1],i),add(gr[e[i].y=y+1],i); read(e[i].p),e[i].l=e[i].r=-1; } for(i=2;i<=1000;i++){ for(j=0;j<=1000;j++)b[j]=j%i,q[i][j]=j; sort(q[i],q[i]+1001,cmp); } solve(1,n); for(i=1;i<=m;i++)printf("%d\n",max(e[i].l,e[i].r)); return 0;}

  

转载地址:http://gqtto.baihongyu.com/

你可能感兴趣的文章
Oracle 查找带有CLOB字段的所有表
查看>>
一键部署WordPress开源内容管理系统
查看>>
实现Repeater控件的记录单选
查看>>
MySQL定义和变量赋值
查看>>
O(n)获得中位数及获得第K小(大)的数
查看>>
windows下 管理员身份启动java进程
查看>>
excel 分类汇总函数
查看>>
Web安全之XSS攻击与防御小结
查看>>
一个简单的图片懒加载
查看>>
Python爬虫实战案例-爬取币世界标红快讯
查看>>
Golang 流式解析 Json
查看>>
软考新思维--2017年上半年信息系统项目管理师上午试题分析与答案(试题26-30题)...
查看>>
Windows 2008 R2 Hyper-V Failover Clustering 5
查看>>
Exchange企业实战技巧(5)配置OWA域名简写
查看>>
Nabou应用实例
查看>>
烂泥:ESXI开启SNMP服务
查看>>
《统一沟通-微软-实战》-6-部署-7-部署移动功能-2
查看>>
go语言笔记——调试还很弱,用gdb来做?可用panic和defer。格式化代码使用gofmt,貌似我的vim插件是自带...
查看>>
Linux 安装.src.rpm源码包的方法
查看>>
c#将对象序列化为字符串和将字符串反序列化为对象
查看>>