zoukankan      html  css  js  c++  java
  • UVALive 5881

    DES:给出一个数列。然后有q个询问,对给定的区间内是否有重复的数。如果有输出任意一个重复的。如果没有输出OK。

    开始以为是线段树。后来发现。只是水的比较隐蔽。感觉这个方法还是很聪明的。把每个点的最近的有重复的数的区间记录下来。这样每次询问都可以直接表示结果了。

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<iostream>
     4 #include<map>
     5 #define inf 0x3f3f3f3f
     6 using namespace std;
     7 
     8 map<int, int>mp;
     9 int num[1000010];
    10 int id[1000010];
    11 
    12 int main()
    13 {
    14     int n, q;
    15     while(cin >> n >> q)
    16     {
    17         if (n == 0 && q == 0) break;
    18         for (int i=0; i<n; ++i)
    19         {
    20             cin >> num[i];
    21         }
    22 
    23         mp.clear();
    24         id[n] = inf;
    25 
    26         for (int i=n-1; i>=0; --i)
    27         {
    28             if (mp[num[i]] == 0)
    29             {
    30                 id[i] = id[i+1];
    31                 mp[num[i]] = i;
    32                 continue;
    33             }
    34             else
    35             {
    36                id[i] = min(mp[num[i]], id[i+1]);
    37                mp[num[i]] = i;
    38             }
    39         }
    40 
    41         while(q--)
    42         {
    43             int x, y;
    44             cin >> x >> y;
    45             x--;
    46             y--;
    47             if (y < id[x]) cout << "OK
    ";
    48             else cout << num[id[x]] << endl;
    49         }
    50         cout << endl;
    51     }
    52     return 0;
    53 }
    LOoK
  • 相关阅读:
    GateWay配置使用
    Hystrix&Dashboard配置使用
    Ribbon&OpenFeign配置使用
    服务端&客户端注册进Eureka
    Eureka单机&集群配置
    通过淘宝IP库获取定位
    php 红包瓜分算法(实用)
    换博客力!
    2021 上学期做题记录
    计数 DP 学习笔记
  • 原文地址:https://www.cnblogs.com/icode-girl/p/4709885.html
Copyright © 2011-2022 走看看