小a的排列 模擬,思維

2021-09-30 20:01:44 字數 1312 閱讀 6721

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 32768k,其他語言65536k

64bit io format: %lld

小a有乙個長度為nn的排列。定義一段區間是"萌"的,當且僅當把區間中各個數排序後相鄰元素的差為11

現在他想知道包含數x,yx,y的長度最小的"萌"區間的左右端點

也就是說,我們需要找到長度最小的區間[l,r][l,r],滿足區間[l,r][l,r]是"萌"的,且同時包含數xx和數yy

如果有多個合法的區間,輸出左端點最靠左的方案。

第一行三個整數n,x,yn,x,y,分別表示序列長度,詢問的兩個數

第二行有nn個整數表示序列內的元素,保證輸入為乙個排列

輸出兩個整數,表示長度最小"萌"區間的左右端點
示例1

5 2 3

5 2 1 3 4

2 4
區間[2,4]=[2,4]=包含了2,32,3且為「萌」區間,可以證明沒有比這更優的方案
示例2

8 3 5

6 7 1 8 5 2 4 3

5 8
保證2⩽n⩽105,1⩽x,y⩽n
解析:

對於一段不連續的區間,我們遍歷缺少的點的座標,找到最左的和最右的,將陣列擴充

更新完後,可能又會產生不連續的,我們迴圈操作,最後一定有區間能,最大就整個陣列

操作方法:

用陣列b記錄點的座標,遍歷x到y的一段陣列,找到最小x的和最大的y,

我們遍歷x~y的座標,找到x~y的最左端c和最右端d

如果c==l&&d==r,就表示這段區間符合題目要求,否則,l和r要擴充(l=c,r=d),直到出現乙個符合的區間

ac:

#include#define maxn 300005

using namespace std;

int a[maxn]=;

int b[maxn]=;

int main()

int l=min(b[x],b[y]);

int r=max(b[x],b[y]);

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

cout

for(int i=x;i<=y;i++)

if(c==l&&r==d)

}return 0;

}

小a的排列

小a的排列 時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 小a有乙個長度為nn的排列。定義一段區間是 萌 的,當且僅當把區間中各個數排序後相鄰元素的差為11 現在他想知道包含數x,yx,y的長度最小的 萌 區間的左...

F Candle Box 模擬 思維

題目鏈結 題意 姐姐從4歲開始向盒子裡放與年數相等的蠟燭,弟弟從3歲開始,兩人各有乙個盒子,但是最近一些年弟弟把自己的蠟燭誤放在姐姐的盒子裡。現給出姐姐和弟弟的年齡差,以及現在姐姐盒子裡和弟弟盒子裡的蠟燭數量,求姐姐應該從自己的盒子裡面拿出多少蠟燭才能得到當前應有的蠟燭。思路 等差數列求和公式,然後...

NOIP2018 模擬題 小P的集合 思維

題目大意 有n個數字,其中有k個數字出現了奇數次,求這k個數字,其中記憶體只給4mb,k 2 題目思路 由於記憶體極小,所以很容易想到應該是通過位來得到結果。首先是假如只有乙個數字是奇數次,那麼很簡單直接全異或起來,那些出現偶數次的就全消掉了,剩下來的就是答案。如果有兩個的話,就說明我們得到的結果是...