Zoj 3633 Alice's present (line segment tree)

Source: Internet
Author: User

As a doll master, Alice owns a wide range of dolls, and each of them has a number tip on it's back, the tip can be treated as a positive integer. (The number can be repeated ). one day, Alice hears that her best friend Marisa's birthday is coming, so she decides to sent Marisa some dolls for present. alice puts her dolls in a row and marks them from 1N. Each time Alice chooses an interval fromIToJIn the sequence (includeIAndJ), And then checks the number tips on dolls in the interval from right to left. if any number appears more than once, Alice will treat this interval as unsuitable. otherwise, this interval will be treated as suitable.

This work is so boring and it will waste Alice a lot of time. So Alice asks you for help.

Input

There are multiple test cases. For each test case:

The first line contains an integerN(3 ≤N≤ 500,000), indicate the number of dolls which Alice owns.

The second line containsNPositive integers, decribe the number tips on dolls. All of them are less than 2 ^ 31-1. The third line contains an intergerM(1 ≤M≤ 50,000), indicate how many intervals Alice will query. Then followed by M lines, each line contains two integerU,V(1 ≤U<V≤N), Indicate the left endpoint and right endpoint of the interval. process to the end of input.

Output

For each test case:

For each query, if this interval is suitable, print one line "OK". Otherwise, print one line, the Integer Which appears more than once first.

Print an blank line after each case.

Sample Input
51 2 3 1 231 41 53 561 2 3 3 2 141 42 53 64 6
Sample output
12OK333OK
Hint

Alice will check each interval from right to left, don't make mistakes.


Question: given an interval, ask about the number of trees with duplicates in the interval.

Map: indicates that a number is in the same position on the left, but is not set to-1. It is converted to the maximum value of the query range.

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<map>typedef long long LL;using namespace std;#define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i )#define REP( i , n ) for ( int i = 0 ; i < n ; ++ i )#define CLEAR( a , x ) memset ( a , x , sizeof a )const int maxn=500000+100;int t[maxn<<2],a[maxn],b[maxn];map<int,int>f;//int hash[maxn];int n,m;void pushup(int rs){    t[rs]=max(t[rs<<1],t[rs<<1|1]);}void build(int rs,int l,int r){    if(l==r)    {        t[rs]=a[l];        return ;    }    int mid=(l+r)>>1;    build(rs<<1,l,mid);    build(rs<<1|1,mid+1,r);    pushup(rs);}int query(int rs,int l,int r,int x,int y){    if(x<=l&&y>=r)  return t[rs];    int mid=(l+r)>>1;    int res1,res2;    res1=res2=-1;    if(x<=mid)  res1=query(rs<<1,l,mid,x,y);    if(y>mid)   res2=query(rs<<1|1,mid+1,r,x,y);    return max(res1,res2);}int main(){    int x,y;    while(~scanf("%d",&n))    {        f.clear();//        CLEAR(hash,0);        REPF(i,1,n)        {            scanf("%d",&x);            b[i]=x;            if(!f[x])            {                f[x]=i;                a[i]=-1;            }            else            {                a[i]=f[x];                f[x]=i;            }        }        build(1,1,n);        scanf("%d",&m);        REP(i,m)        {            scanf("%d%d",&x,&y);            int ans=query(1,1,n,x,y);            if(ans<x) puts("OK");            else  printf("%d\n",b[ans]);        }        puts("");    }    return 0;}


Zoj 3633 Alice's present (line segment tree)

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.