lower_bound ãä¸æã«é§ä½¿ããç³»
åé¡æ¦è¦
人ã®é¸æããã³ã³ãã¹ãã«åå ãã¦ãããåé¸æã®ç¾å¨ã®å¾ç¹ã¯
ã§ããã
ã©ã®é¸æã«ã¤ãã¦ããä»å¾å ç®ãããå¯è½æ§ã®ããå¾ç¹ã¯ã ç¹ä»¥ä¸
ç¹ä»¥ä¸ã¨ãªã£ã¦ãã (
åä¸
åã®ç«¶æãçµäºãã¦ããã¨ããè¨å®)ã
競æçµäºæã«ããã¦ãã ç¹ä»¥ä¸ãç²å¾ãã¦ããé¸æã®äººæ°ã
以ä¸ã§ãããã¨ããæ¡ä»¶ãæºããæ大ã®
ã
ã¨ãã¦ã
ç¹ä»¥ä¸ãç²å¾ããé¸æã«éã¡ãã«ãè´ãããã
åé¸æã«å¯¾ãã¦ã
- ãã®é¸æãéã¡ãã«ãç²å¾ã§ãããã¨ã確å®ãã©ãã
- ããã§ãªãå ´åã«ãéã¡ãã«ãç²å¾ã§ããå¯è½æ§ããããã©ãã
ãå¤å®ããã
å¶ç´
èãããã¨
(追å å¾ç¹ã®æ大å¤)ã
(éã¡ãã«ç²å¾è
ããå¾ç¹ãé«ã人ã®äººæ°ã®ä¸éå¤) ã¨ããã
ã¾ããéã¡ãã«ç¢ºå®ã§ããã¨ã¯ã
- èªåã®è¿½å å¾ç¹ã¯ 0 ç¹
- èªå以å¤ã®è¿½å å¾ç¹ã¯å
¨å¡ã
ç¹
ã¨ããç¶æ³ã§ãã£ã¦ãéã¡ãã«ãç²ãããã¨ãè¨ããããã¯è¨ãæããã¨
ã®ãã¡ã
ããã大ããå¤ã¨ãªããã®ãã
ãé¤ãã¦
å以ä¸ã§ãã
ã¨ãªãã ã®ãã¡ã
ããã大ããå¤ã¨ãªããã®ã®åæ°ã¯ã
ãã½ã¼ãããé
åä¸ã§äºåæ¢ç´¢ (upper_bound() ãªã©) ãç¨ãããã¨ã§
ã§è¨ç®ã§ããã
次ã«éã¡ãã«ã®å¯è½æ§ãããã¨ã¯
- èªåã®è¿½å å¾ç¹ã
ç¹
- èªå以å¤ã®è¿½å å¾ç¹ã¯å
¨å¡ã
ç¹
ã¨ããç¶æ³ã§ããã°éã¡ãã«ãç²ãããã¨ãè¨ããããã¯è¨ãæããã¨
ã®ãã¡ã
ããã大ããå¤ã¨ãªããã®ãã
å以ä¸ã§ãã
ã¨ãªãããããåæ§ã«ã ã§è¨ç®ã§ããã
ã³ã¼ã
å
¨ä½ã¨ãã¦è¨ç®é㯠ã¨ãªãã
#include <bits/stdc++.h> using namespace std; int main() { int K, N, M; cin >> K >> N >> M; int V = 100*(N-M), L = (K+11)/12-1; vector<int> P(K); for (int i = 0; i < K; ++i) cin >> P[i]; auto Q = P; sort(Q.begin(), Q.end()); // x ç¹ããå¤ãç²å¾ãã人ãä½äººããã // ãã ã y > x ã®å ´å㯠1 ãå¼ã auto calc = [&](int x, int y) -> int { int it = upper_bound(Q.begin(), Q.end(), x) - Q.begin(); return (y > x ? K - it - 1 : K - it); }; vector<int> res(K, 0); for (int i = 0; i < K; ++i) { if (calc(P[i]-V, P[i]) <= L) res[i] = 2; else if (calc(P[i]+V, P[i]) <= L) res[i] = 1; } for (int i = 0; i < K; ++i) if (res[i] == 2) cout << i+1 << endl; cout << "--------" << endl; for (int i = 0; i < K; ++i) if (res[i] >= 1) cout << i+1 << endl; }