您的位置:首页 > 其它

Codeforces 639A (set 水~)

2016-03-29 14:38 363 查看
A. Bear and Displayed Friends

time limit per test
2 seconds

memory limit per test
256 megabytes

input
standard input

output
standard output

Limak is a little polar bear. He loves connecting with other bears via social networks. He has n friends and his relation with the i-th
of them is described by a unique integer ti.
The bigger this value is, the better the friendship is. No two friends have the same value ti.

Spring is starting and the Winter sleep is over for bears. Limak has just woken up and logged in. All his friends still sleep and thus none of them is online. Some (maybe all) of them will appear online in the next hours, one at a time.

The system displays friends who are online. On the screen there is space to display at most k friends. If there are more than k friends
online then the system displays only k best of them — those with biggest ti.

Your task is to handle queries of two types:

"1 id" — Friend id becomes online.
It's guaranteed that he wasn't online before.

"2 id" — Check whether friend id is
displayed by the system. Print "YES" or "NO" in a separate
line.

Are you able to help Limak and answer all queries of the second type?

Input

The first line contains three integers n, k and q (1 ≤ n, q ≤ 150 000, 1 ≤ k ≤ min(6, n)) —
the number of friends, the maximum number of displayed online friends and the number of queries, respectively.

The second line contains n integers t1, t2, ..., tn (1 ≤ ti ≤ 109)
where ti describes
how good is Limak's relation with the i-th friend.

The i-th of the following q lines
contains two integers typei and idi (1 ≤ typei ≤ 2, 1 ≤ idi ≤ n) —
the i-th query. If typei = 1 then
a friend idi becomes
online. If typei = 2 then
you should check whether a friend idi is
displayed.

It's guaranteed that no two queries of the first type will have the same idi becuase
one friend can't become online twice. Also, it's guaranteed that at least one query will be of the second type (typei = 2)
so the output won't be empty.

Output

For each query of the second type print one line with the answer — "YES" (without quotes) if the given friend is displayed and "NO"
(without quotes) otherwise.

Examples

input
4 2 8
300 950 500 200
1 3
2 4
2 3
1 1
1 2
2 1
2 2
2 3


output
NO
YES
NO
YES
YES


input
6 3 9
50 20 51 17 99 24
1 3
1 4
1 5
1 2
2 4
2 2
1 1
2 4
2 3


output
NO
YES
NO
YES


Note

In the first sample, Limak has 4 friends who all sleep initially. At first, the system displays nobody because nobody is online. There are the
following 8 queries:

"1 3" — Friend 3 becomes online.

"2 4" — We should check if friend 4 is
displayed. He isn't even online and thus we print "NO".

"2 3" — We should check if friend 3 is
displayed. Right now he is the only friend online and the system displays him. We should print "YES".

"1 1" — Friend 1 becomes online. The system
now displays both friend 1 and friend 3.

"1 2" — Friend 2 becomes online. There
are 3 friends online now but we were given k = 2 so
only two friends can be displayed. Limak has worse relation with friend 1 than with other two online friends (t1 < t2, t3)
so friend 1 won't be displayed

"2 1" — Print "NO".

"2 2" — Print "YES".

"2 3" — Print "YES".

题意:每次显示不能超过k个人,当一个友情值更高的人上线时如果会替换掉当前显示的最小的友情值低于他

的人.2表示询问某个编号的人是不是正在被显示.

用一个set模拟就好了

#include <bits/stdc++.h>
using namespace std;
#define maxn 151111

int n, k, q, t[maxn];
struct node {
int t, id;
bool operator < (const node &a) const {
return t < a.t;
}
}p[maxn];
bool vis[maxn];
set <node> gg;
set <node>::iterator it;

int main () {
//freopen ("in.txt", "r", stdin);
while (cin >> n >> k >> q) {
for (int i = 1; i <= n; i++) {
cin >> p[i].t;
p[i].id = i;
}
gg.clear ();
memset (vis, 0, sizeof vis);
while (q--) {
int id, op;
cin >> op >> id;
if (op == 1) {
if (gg.size () < k) {
gg.insert (p[id]);
vis[p[id].id] = 1;
}
else {
it = gg.begin ();
node cur = (*it);
if (cur.t < p[id].t) {
gg.erase (cur);
vis[cur.id] = 0;
gg.insert (p[id]);
vis[p[id].id] = 1;
}
}
}
else {
if (vis[id])
cout << "YES\n";
else
cout << "NO\n";
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: