nyoj 133 子串行 (離散化 尺取法)

2021-07-26 19:51:22 字數 996 閱讀 8744

時間限制:

3000 ms  |  記憶體限制:

65535 kb

難度:5 描述

給定乙個序列,請你求出該序列的乙個連續的子串行,使原串中出現的所有元素皆在該子串行中出現過至少1次。

如2 8 8 8 1 1,所求子串就是2 8 8 8 1。

輸入

第一行輸入乙個整數t(0

輸出對於每組輸入,輸出包含該序列中所有元素的最短子串行的長度

樣例輸入

2

51 8 8 8 1

62 8 8 8 1 1

樣例輸出

2

5

**poj月賽改編

上傳者張云聰

由於數字太大無法用陣列模擬,所以先離散化資料,然後尺取法即可。

(ps: 標程是雜湊+佇列,離散化+尺取法可以卡過去(stl會tle))

#include #include #include #include #include #include #include #include #define me(a,b) memset(a,b,sizeof(a))

#define sc(a) scanf("%d",&a)

using namespace std;

const int maxn=1e6+10;

int t;

int num[maxn];

int a[maxn];

int main()

//———————————————————————————————————————————離散化—————————————————————————————————————

sort(a+1,a+n+1);

int cnt=1;

for(int i=2;i<=n;i++)

int maxx=cnt; //元素的數目

for(int i=1;i<=n;i++)

else if(a[mid]

nyoj 133 子串行 尺取法 離散化

時間限制 3000 ms 記憶體限制 65535 kb 難度 5 描述 給定乙個序列,請你求出該序列的乙個連續的子串行,使原串中出現的所有元素皆在該子串行中出現過至少1次。如2 8 8 8 1 1,所求子串就是2 8 8 8 1。輸入 第一行輸入乙個整數t 0 輸出對於每組輸入,輸出包含該序列中所有...

nyoj133 子串行 雜湊 佇列

描述 給定乙個序列,請你求出該序列的乙個連續的子串行,使原串中出現的所有元素皆在該子串行中出現過至少1次。如2 8 8 8 1 1,所求子串就是2 8 8 8 1。輸入 第一行輸入乙個整數t 0 輸出對於每組輸入,輸出包含該序列中所有元素的最短子串行的長度 樣例輸入 2 51 8 8 8 1 62 ...

(二分,尺取,離散化)1686 第K大區間

1 秒131,072 kb 40 分 4 級題 定義乙個區間的值為其眾數出現的次數。現給出n個數,求將所有區間的值排序後,第k大的值為多少。收起 第一行兩個數n和k 1 n 100000,k n n 1 2 第二行n個數,0 每個數 2 31乙個數表示答案。4 2 1 2 3 22題解 二分 尺取 ...