Codeforces Round #367 (Div. 2) B. Interesting drink 离线操作
来源:互联网 发布:虚拟货币交易平台源码 编辑:程序博客网 时间:2024/05/29 13:06
Vasiliy likes to rest after a hard work, so you may often meet him in some bar nearby. As all programmers do, he loves the famous drink "Beecola", which can be bought in n different shops in the city. It's known that the price of one bottle in the shop i is equal to xi coins.
Vasiliy plans to buy his favorite drink for q consecutive days. He knows, that on the i-th day he will be able to spent mi coins. Now, for each of the days he want to know in how many different shops he can buy a bottle of "Beecola".
The first line of the input contains a single integer n (1 ≤ n ≤ 100 000) — the number of shops in the city that sell Vasiliy's favourite drink.
The second line contains n integers xi (1 ≤ xi ≤ 100 000) — prices of the bottles of the drink in the i-th shop.
The third line contains a single integer q (1 ≤ q ≤ 100 000) — the number of days Vasiliy plans to buy the drink.
Then follow q lines each containing one integer mi (1 ≤ mi ≤ 109) — the number of coins Vasiliy can spent on the i-th day.
Print q integers. The i-th of them should be equal to the number of shops where Vasiliy will be able to buy a bottle of the drink on the i-th day.
53 10 8 6 114110311
0415
On the first day, Vasiliy won't be able to buy a drink in any of the shops.
On the second day, Vasiliy can buy a drink in the shops 1, 2, 3 and 4.
On the third day, Vasiliy can buy a drink only in the shop number 1.
Finally, on the last day Vasiliy can buy a drink in any shop.
Source
Codeforces Round #367 (Div. 2)
My Solution
离线操作
朴素的离线操作 O(n)
把询问记录下来,然后根据值排序, 然后 扫一遍数组就出来了
然后把offline[maxn]根据下标Ind排序,然后依次输出就好了
复杂度 O(n)
#include <iostream>#include <cstdio>#include <algorithm>using namespace std;typedef long long LL;const int maxn = 1e6 + 8;int val[maxn];struct p{ int Ind, val, ans;}offline[maxn];inline bool cmp(const p &a, const p &b){ if(a.val != b.val) return a.val < b.val; else return a.Ind < b.Ind;}inline bool cmpi(const p &a, const p &b){ return a.Ind < b.Ind;}int main(){ #ifdef LOCAL freopen("a.txt", "r", stdin); //freopen("b.txt", "w", stdout); int T = 3; while(T--){ #endif // LOCAL int n, q; scanf("%d", &n); for(int i = 0; i < n; i++){ scanf("%d", &val[i]); } sort(val, val + n); scanf("%d", &q); for(int i = 0; i < q; i++){ scanf("%d", &offline[i].val); offline[i].Ind = i; } sort(offline, offline + q, cmp); int ptr = 0; for(int i = 0; i < n; i++){ while(offline[ptr].val < val[i]){ offline[ptr].ans = i; ptr++; if(ptr == q) break; } if(ptr == q) break; } while(ptr < q){ offline[ptr].ans = n; ptr++; } sort(offline, offline + q, cmpi); for(int i = 0; i < q; i++){ printf("%d\n", offline[i].ans); } #ifdef LOCAL printf("\n"); } #endif // LOCAL return 0;}
Thank you!
------from ProLights
- Codeforces Round #367 (Div. 2) B. Interesting drink 离线操作
- Codeforces Round #367 (Div. 2) B Interesting drink【二分】
- 【Codeforces Round 367 (Div 2) B】【二分查找】Interesting drink
- Codeforces Round #367 (Div. 2) [B] Interesting drink
- Codeforces Round #367 (Div. 2) B. Interesting drink 树状数组
- Codeforces Round #367 (Div. 2) B Interesting drink(二分)
- Codeforces Round #367 (Div. 2) B - Interesting drink
- Codeforces Round #367 (Div. 2) B. Interesting drink (二分)
- Codeforces Round #367 (Div. 2) B. Interesting drink (二分)
- Codeforces Round #367 (Div. 2) B Interesting drink
- Codeforces Round #367 (Div. 2) B. Interesting drink(二分)
- Codeforces #367(Div.2)B Interesting drink【树状数组】
- codeforces-367#B. Interesting drink
- Codeforces #367 B. Interesting drink(二分)
- CodeForces 706B Interesting drink
- CodeForces 706B Interesting drink
- 【codeforces 706B Interesting drink】
- CodeForces-706B. Interesting drink
- 如何用C语言(VisualStudio)调用NLPIR进行中文分词
- FZU 2221 RunningMan
- JAVA学习28_ java常见面试题及答案 1-10
- 各邮箱smtp服务器及支持的协议
- sicily 1198
- Codeforces Round #367 (Div. 2) B. Interesting drink 离线操作
- 安卓应用,在存储卡中,增加windows下文件的隐藏属性
- Linux下搭建C/C++开发环境
- LeetCode 23 - Merge k Sorted Lists
- LeetCode 241 - Different Ways to Add Parentheses
- 【笔记】今天貌似遇到了Python 3的bug
- 高手之路——Po学校学习笔记-第七课
- 方法欺骗
- spoj QTREE - Query on a tree(树链刨分)