참조로 고치고 lower_bound로 찾기
물건 n개의 이름·가격·재고를 구조체(struct)의 std::vector에 담고, 명령 m개로 고친 뒤, 질의 q개에 답하라.
물건을 이름으로 찾는 함수는 vector 안의 원소를 참조(Item&)로 돌려주고, 고치는 함수는 그 참조를 받아 원소를 그 자리에서 바꾼다.
명령을 모두 처리한 뒤, 람다 비교 함수를 준 std::sort로 가격이 낮은 순, 가격이 같으면 이름의 사전 순으로 늘어놓는다.
질의에는 std::lower_bound로 답한다.
첫 줄에 n이, 다음 n줄에 "이름 가격 재고"가 주어진다.
그다음 줄에 m이, 다음 m줄에 명령이 "sell 이름 k", "restock 이름 k", "price 이름 p" 가운데 하나로 주어진다.
sell은 재고가 k개 이상이면 k개를 빼고, 모자라면 아무것도 바꾸지 않는다.
restock은 재고에 k를 더한다.
price는 가격을 p로 바꾼다.
그다음 줄에 q가, 다음 q줄에 정수 x가 하나씩 주어진다.
질의마다, 늘어놓은 목록에서 가격이 x보다 낮은 물건의 수 c와 가격이 x 이상인 첫 물건을 "c 이름 가격 재고"로 출력한다.
그런 물건이 없으면 "c none"을 출력한다.
- 입력
- 1 ≤ n ≤ 1000, 0 ≤ m ≤ 1000, 1 ≤ q ≤ 1000.
이름은 영어 소문자 1 ~ 8글자이고 서로 다르며, 명령에는 있는 이름만 나온다.
1 ≤ 가격, p ≤ 1,000,000,000.
처음 재고는 0 ~ 1000, 1 ≤ k ≤ 1,000,000.
1 ≤ x ≤ 1,000,000,001(모두 정수) - 출력
- 질의마다 한 줄
4 pear 7 1 fig 7 2 apple 9 3 kiwi 2 4 3 sell fig 2 sell kiwi 5 price apple 7 4 7 3 1 8
1 apple 7 3 1 apple 7 3 0 kiwi 2 4 4 none
2 tea 10 5 jam 20 5 2 restock tea 3 price tea 30 3 20 21 31
0 jam 20 5 1 tea 30 8 2 none