博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3145 Harmony Forever
阅读量:6917 次
发布时间:2019-06-27

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

题意:给出”A x”&”B y”两种操作,前者表示查询数列中模x最小的数,如果相等的话,那么输出最近那个数进入数列的顺序

  这样的操作容易想到线段树,但会发现建树时不知道怎么具体建树,可以充分利用一下数据范围,对于每个数都建立一个节点,然后直接做就好了,最重要的就是查询时, 对于1~mod-1, mod~2*mod-1, ……这样的一个一个查询,但是容易发现当模数很小的时候,这样会常数很大,不如直接暴力

还有就是要注意不要手写max, min我手写一直TLE但是用了max,min后就900ms好像也不算慢了,还有存在”-1”的情况

#include 
#include
#include
using namespace std;const int N = 5e5 + 10;#define rep(i, s, t) for(int i = s; i <= t; ++i)#define dec(i, s, t) for(int i = s; i >= t; --i)int n, a[N], id[N], top;struct Bf { int query(int Mod) { int Res = 0, Mo = N; dec(i, top, 1) { if(Mo > (a[i]%Mod)) Res = a[i], Mo = a[i] % Mod; if(!Mo) break; }return Res?id[Res]:-1; }}B;struct Ser { int Min[N<<2]; void update(int h, int pos, int l, int r) { Min[h] = min(Min[h], pos); if(l == r) return ; int Mid = (l+r) >> 1; if(pos <= Mid) update(h<<1, pos, l, Mid); else update(h<<1|1, pos, Mid+1, r); } int query(int h, int ql, int qr, int l, int r) { if((ql <= l && r <= qr) || Min[h]>=N) return Min[h]; int Mid = (l+r) >> 1, Ret = N; if(ql <= Mid) Ret = min(Ret, query(h<<1, ql, qr, l, Mid)); if(Ret < N) return Ret; if(qr > Mid) Ret = min(Ret, query(h<<1|1, ql, qr, Mid+1, r)); return Ret; }}S; void Q(int Mod, int Max) { if(Mod < 4000) printf("%d\n", B.query(Mod)); else { int t, Ret = 0, Mo = N<<1; for(int i = 0; i*Mod <= N; ++i) { int st = max(i*Mod, 1); int ed = min((i+1)*Mod-1, N); t = S.query(1, st, ed, 1, N); if(t >= N) continue; if((t%Mod) < Mo) Mo = t % Mod, Ret = t; else if((t%Mod)== Mo && id[Ret] < id[t]) Ret = t; } printf("%d\n", Ret?id[Ret]:-1); }}int main() {#ifndef ONLINE_JUDGE freopen("input.in", "r", stdin); freopen("res.out", "w", stdout);#endif int T = 0, d; char s[3]; while(scanf("%d", &n), n) { int Max = 0; top = 0; if(T) puts(""); printf("Case %d:\n", ++T); rep(i, 0, N-1) id[i] = 0; rep(i, 0, (N<<2)-1) S.Min[i] = N; rep(i, 1, n) { scanf("%s%d", s, &d); if(s[0] == 'A') Q(d, Max); else { Max = max(Max, d); a[++top] = d; id[d] = top; S.update(1, d, 1, N); } } } return 0;}

转载于:https://www.cnblogs.com/pbvrvnq/p/8530151.html

你可能感兴趣的文章
自定义带阴影的ImageView
查看>>
[BTCC] 要“工程师”“工程师”“工程师”
查看>>
EChart.js简单入门
查看>>
HDFS Decommission问题分析
查看>>
编程心智——二八定律对软件开发的影响
查看>>
MarkDown
查看>>
【转】10个简单步骤,完全理解SQL
查看>>
小程序开发是不是又被坑?这里有一个小程序项目的两年心得
查看>>
mariadb配置允许远程访问方式
查看>>
java版spring cloud+spring boot+redis社交电子商务平台(四)SpringBoot 整合JPA
查看>>
Java Servlet Development Without Eclipse
查看>>
阅读YYModel
查看>>
Spring分布式事务实现概览
查看>>
Springcloud电子商城系统 java B2B2C-服务消费者(rest+ribbon)
查看>>
java B2B2C 源码 多级分销Springcloud多租户电子商城系统-服务消费(Feign)
查看>>
Linux dialog详解(图形化shell)
查看>>
Java集群框架Shoal支持容错及分布式状态缓存
查看>>
我的友情链接
查看>>
类centos6.5编译安装LNMP架构web环境
查看>>
My English
查看>>