#include <iostream>
using namespace std;
//https://v...content-available-to-author-only...i.info/wiki/algo/basic/two-pointers.md
//Hai dãy không giảm -> ghép thành 1 dãy không giảm, O(n+m)
int i = 1, j = 1;
vector<int> c;
while (i <= n || j <= m){
if (j == m + 1 || (i <= n && a[i] <= b[j]))
c.push_back(a[i++]);
else
c.push_back(b[j++]);
}
for (auto it: c){
cout << it << " ";
}
//Mảng tăng dần -> tìm 2 phần tử vị trí khác nhau tổng là x
int i = 1, j = N;
while (i < j) {
if (a[i] + a[j] == x) {
cout << i << " " << j;
return 0;
}
if (a[i] + a[j] < x)
i += 1;
else
j -= 1;
}
cout << "No solution";
//Độ dài đoạn con dài nhất sao cho tổng các phần tử trong đoạn con không quá s
int ans = 0, sum = 0;
for (int l = 1, r = 1; r <= n; r++) {
sum += a[r];
while (sum > s) {
sum -= a[l];
l++;
}
ans = max(ans, r - l + 1);
}
cout << ans;
//Tortoise and Hare
//tortoise và hare gặp nhau
int tortoise = 1, hare = 1;
while (true) {
tortoise = f(tortoise);
hare = f(f(hare));
if (tortoise == hare)
break;
}
//tìm mu
int mu = 0, p = 1;
while (p != tortoise) {
p = f(p);
tortoise = f(tortoise);
mu++;
}
//tìm lambda
int lambda = 0;
while (true) {
lambda++;
p = f(p);
if (tortoise == p)
break;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy9odHRwczovL3YuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmkuaW5mby93aWtpL2FsZ28vYmFzaWMvdHdvLXBvaW50ZXJzLm1kCgoKLy9IYWkgZMOjeSBraMO0bmcgZ2nhuqNtIC0+IGdow6lwIHRow6BuaCAxIGTDo3kga2jDtG5nIGdp4bqjbSwgTyhuK20pCmludCBpID0gMSwgaiA9IDE7CnZlY3RvcjxpbnQ+IGM7CndoaWxlIChpIDw9IG4gfHwgaiA8PSBtKXsKICAgIGlmIChqID09IG0gKyAxIHx8IChpIDw9IG4gJiYgYVtpXSA8PSBiW2pdKSkKICAgICAgICBjLnB1c2hfYmFjayhhW2krK10pOwogICAgZWxzZSAKICAgICAgICBjLnB1c2hfYmFjayhiW2orK10pOwp9CmZvciAoYXV0byBpdDogYyl7Cgljb3V0IDw8IGl0IDw8ICIgIjsKfQoKCgovL03huqNuZyB0xINuZyBk4bqnbiAtPiB0w6xtIDIgcGjhuqduIHThu60gduG7iyB0csOtIGtow6FjIG5oYXUgdOG7lW5nIGzDoCB4CmludCBpID0gMSwgaiA9IE47CndoaWxlIChpIDwgaikgewogICAgaWYgKGFbaV0gKyBhW2pdID09IHgpIHsKICAgICAgICBjb3V0IDw8IGkgPDwgIiAiIDw8IGo7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBpZiAoYVtpXSArIGFbal0gPCB4KQogICAgICAgIGkgKz0gMTsKICAgIGVsc2UKICAgICAgICBqIC09IDE7Cn0KY291dCA8PCAiTm8gc29sdXRpb24iOwoKCgovL8SQ4buZIGTDoGkgxJFv4bqhbiBjb24gZMOgaSBuaOG6pXQgc2FvIGNobyB04buVbmcgY8OhYyBwaOG6p24gdOG7rSB0cm9uZyDEkW/huqFuIGNvbiBraMO0bmcgcXXDoSBzCmludCBhbnMgPSAwLCBzdW0gPSAwOwpmb3IgKGludCBsID0gMSwgciA9IDE7IHIgPD0gbjsgcisrKSB7CiAgICBzdW0gKz0gYVtyXTsKICAgIHdoaWxlIChzdW0gPiBzKSB7CiAgICAgIHN1bSAtPSBhW2xdOwogICAgICBsKys7CiAgICB9CiAgICBhbnMgPSBtYXgoYW5zLCByIC0gbCArIDEpOwp9CmNvdXQgPDwgYW5zOwoKCgovL1RvcnRvaXNlIGFuZCBIYXJlCgovL3RvcnRvaXNlIHbDoCBoYXJlIGfhurdwIG5oYXUKaW50IHRvcnRvaXNlID0gMSwgaGFyZSA9IDE7CndoaWxlICh0cnVlKSB7CiAgICB0b3J0b2lzZSA9IGYodG9ydG9pc2UpOwogICAgaGFyZSA9IGYoZihoYXJlKSk7CiAgICBpZiAodG9ydG9pc2UgPT0gaGFyZSkKICAgICAgYnJlYWs7Cn0KLy90w6xtIG11CmludCBtdSA9IDAsIHAgPSAxOwp3aGlsZSAocCAhPSB0b3J0b2lzZSkgewogICAgcCA9IGYocCk7CiAgICB0b3J0b2lzZSA9IGYodG9ydG9pc2UpOwogICAgbXUrKzsKfQovL3TDrG0gbGFtYmRhCmludCBsYW1iZGEgPSAwOwp3aGlsZSAodHJ1ZSkgewogICAgbGFtYmRhKys7CiAgICBwID0gZihwKTsKICAgIGlmICh0b3J0b2lzZSA9PSBwKQogICAgICBicmVhazsKfQ==