pku 3145

来源:互联网 发布:bim与gis数据集成 编辑:程序博客网 时间:2024/06/03 19:42
#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <vector>#include <map>#include <set>#include <string>#include <cstring>#include <list>#include <queue>#include <stack>#include <cmath>using namespace std;#define PF(x) (scanf("%d",&x))#define PT(x,y) (scanf("%d%d",&x,&y))#define PR(x) (printf("%d\n",x))#define PRT(x,y)(printf("%d %d\n",x,y))#define PB(x)(scanf("%I64d",&x))#define PRB(x)(printf("%I64d\n",(x)))typedef __int64 LL;#define N 510005#define M 105#define Mod 1000#define Inf 0x7fffffff#define L(x) x<<1#define R(x) (x<<1)|1struct tree{int l,r;int mins;int mid(){return (l+r)>>1;}};tree T[4*N];int arr[N];int n;int ans,mid;int pos[N];int maxx;int minx(int a,int b){return a>b?b:a;}void build(int l,int r,int k){T[k].l = l;T[k].r = r;T[k].mins = Inf;if(l == r) return ;int mid = T[k].mid();build(l,mid,L(k));build(mid+1,r,R(k));}void insert(int v,int k){if(T[k].l == T[k].r){T[k].mins = v;return ;}int mid = T[k].mid();if(v<=mid) insert(v,L(k));else insert(v,R(k));T[k].mins = minx(T[L(k)].mins,T[R(k)].mins);}int query(int l,int r,int k){   if(T[k].l>r || T[k].r<l) return Inf;if(T[k].l>=l && T[k].r <=r){return  T[k].mins;}int mid = T[k].mid();return minx(query(l,r,L(k)),query(l,r,R(k)));}void init(){int test=1;int flag = 0;while(scanf("%d",&n)!=EOF && n){if(flag) puts("");flag  = 1;printf("Case %d:\n",test++);build(1,N,1);int tos = 1;maxx = 0;memset(pos,-1,sizeof(pos));for(int i=1;i<=n;i++){char s[10];int x;scanf("%s%d",s,&x);if(s[0] == 'B'){if(maxx<x) maxx = x;pos[x] = tos;arr[tos] = x;insert(x,1);tos++;}else{ if(x<5000){ans = Inf;int index=0;for(int j=tos-1;j>0;--j)   if(arr[j]%x == 0) {index = j;break;}  else if(arr[j]%x<ans){ans = arr[j]%x;index = j;}if(index == 0) puts("-1");else PR(index);}else{int re = Inf;int id=-1;int l = 1,r = x-1;while(l<N){ans = Inf;if(r>N) r = N-1;ans = query(l,r,1);if(l == 1) l = x;else l += x;r += x;if(ans == Inf) continue;if(ans%x<re){re = ans%x;id = pos[ans];}if(ans %x == re && pos[ans]>id) id = pos[ans];}if(re == Inf) puts("-1");else PR(id);}}}}return ;}int main(){init();return 0;}

原创粉丝点击