zoj3633

 1 /*
 2 题意:n个数的序列,m个询问,每次询问给你区间[l,r]问是否区间内有两个相同的数;
 3 如果没有输出OK,有的话输出最右边满足的数的值;
 4 
 5 分析:从左到右扫描一遍,给每个数记录它左边最近的相同数的标号,
 6 那么区间[l,r]最大的标号如果还小于l那么就不存在相同的数;
 7 用线段树维护,顺便记录下该数的下标;
 8 
 9 
10 */
11 #include<cstdio>
12 #include<cstring>
13 #include<cstdlib>
14 #include<iostream>
15 #include<cmath>
16 #include<algorithm>
17 #include<map>
18 #define lson l,m,rt<<1
19 #define rson m+1,r,rt<<1|1
20 using namespace std;
21 const int N=500000+10;
22 int mx[N<<2],id[N<<2],a[N],b[N];
23 map<int,int > mp;
24 void pushup(int rt){
25     if (mx[rt<<1]<=mx[rt<<1|1]){
26         mx[rt]=mx[rt<<1|1];id[rt]=id[rt<<1|1];
27     }else {
28         mx[rt]=mx[rt<<1];id[rt]=mx[rt<<1];
29     }
30 }
31 void build(int l,int r,int rt){
32     mx[rt]=id[rt]=-1;
33     if (l==r) {
34         mx[rt]=b[l];
35         id[rt]=l;
36         return;
37     }
38     int m=(l+r)>>1;
39     build(lson);build(rson);
40     pushup(rt);
41 }
42 typedef pair<int,int> pii;
43 pii query(int L,int R,int l,int r,int rt){
44     if (L<=l && r<=R){
45         return make_pair(mx[rt],id[rt]);
46     }
47     int m=(l+r)>>1;
48     pii u(-1,-1),v(-1,-1);
49     if (L<=m) u=query(L,R,lson);
50     if (m< R) v=query(L,R,rson);
51     if (u.first<=v.first) return v;
52     else return u;
53 }
54 int n,m;
55 int main(){
56     while (~scanf("%d",&n)){
57         for (int i=0;i<n;i++) scanf("%d",&a[i]);
58         mp.clear();
59         for (int i=0;i<n;i++){
60             if (mp.find(a[i])==mp.end()){
61                 mp[a[i]]=i; b[i]=-1;
62             }
63             else {
64                 b[i]=mp[a[i]];
65                 mp[a[i]]=i;
66             }
67         }
68         build(0,n-1,1);
69       //  cout<<mx[1]<<" "<<id[1]<<endl;
70         scanf("%d",&m);
71         for (int i=0;i<m;i++){
72             int x,y;scanf("%d%d",&x,&y);
73             x--,y--;
74             pii ret=query(x,y,0,n-1,1);
75             if (ret.first>=x) printf("%d\n",a[ret.second]);
76             else printf("OK\n");
77         }
78         printf("\n");
79     }
80 }

 

posted @ 2013-05-21 22:12  Rabbit_hair  阅读(245)  评论(0编辑  收藏  举报