十個蘋果放進九個抽屜,一定存在乙個抽屜中放著至少兩個蘋果的情況。
給定乙個長度為n的整數數列,你需要判斷是否能找到乙個長度為(int)sqrt(n-1)的非降序列或者乙個長度為(int)sqrt(n-1)的非增序列。
形式上表示,輸出答案yes當且僅當你可以找到乙個子串行a:他的長度為(int)sqrt(n-1)並且對於每個i,(2≤i≤n),ai≤ai-1 或者你可以找到乙個子串行a:他的長度為(int)sqrt(n-1)並且對於每個i,(2≤i≤n),ai-1≤ai。(建議使用快速讀入)
第一行包含乙個數t (1≤t≤10)——表示t組樣例,
然後對於每組樣例,第一行給出乙個數n(1≤n≤1e7),表示陣列長度。 然後接下來的一行,包含n個整數a1,a2,a3,……an (1≤i≤n 1≤ai<=1e18) ai表示第i個數。資料保證∑n≤4e7。
如果能找到就輸出yes,否則輸出no。
input
21 1
1 3output
yesyes
根據抽屜原理,可以發現,一定可以找到滿足題意的子串行。(題目中沒有說明子串行的連續性,則預設可連續可不連續,即任一情況滿足就輸出yes,做題的時候自己預設了必須連續,愣是沒做出來。。。)
#includeinline int read()
ch = getchar();
}while (ch >= '0' && ch <= '9')
return num * flag;
}int main()
printf("yes");
if (t != 0) printf("\n");
}return 0;
}
快速讀入,顧名思義,很快地讀入資料。
以前做題的時候見到別人這麼寫,還不知道這是個啥。
inline int read()
ch = getchar();
}while (ch >= '0' && ch <= '9')
return num * flag;
}
num的賦值可以用位運算num = (num << 1) + (num << 3) + ch - '0'
原理很簡單,getchar()
速度比scanf
和cin
要快。
對應快讀,自然有快寫
inline void write(int x)
while (cnt > 0) putchar(f[- -cnt]);
//這裡 --連起來回和markdown語法衝突了,中間用了個空格
}
不開陣列的方法
inline void write(int x)
while (len--)
}
cin < cin(關閉同步) < scanf() < read() < fread();
輸出同。
有另一種快速讀入的方法(依然比read()慢), 但是用了之後就不能使用printf
和scanf
了。
ios::sync_with_stdio(false);
int a;
cin >> a;
需要知道,這並不是最快的,更快的還有fread()
,還有比它還快的······
#define online_judge
#ifdef online_judge
char buf[1 << 21], *p1 = buf, *p2 = buf;
inline int getc()
#define getchar getc
#endif
template inline t read()
快速讀入詳解
當你在資訊學競賽 oi 中進入了提高組時,你可能會被卡常!程式被卡常數,一般指程式雖然漸進複雜度可以接受,但是由於實現 演算法本身的時間常數因子較大,使得無法在oi icpc等演算法競賽規定的時限內執行結束。常數被稱為計算機演算法競賽之中最神奇的一類數字,主要特點集中於令人捉摸不透,有時候會讓水平很...
極 快速讀入
14.8 kb 的快讀 以後拉板子方便啦!從 這裡 賀過來的 起源是 here 用 mivik 的 壓行機 壓縮 變數名再壓就看不下去了,放 include include include include include include include need to include平凡版本 fro...
快速讀入的技巧
在oj上練習題目時,有些題目資料的輸入非常大,即便是使用scanf 也會被卡常數,最後導致tle。因此蒐集網上的解決方案,常見的有以下兩種 一 當資料量不是特別大的時間,此時可以關閉stdio的同步,使得cin,cout與printf,scanf一樣快。核心 ios sync with stdio ...