前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CodeForces 639 A

CodeForces 639 A

作者头像
ShenduCC
发布2018-04-26 16:18:23
5250
发布2018-04-26 16:18:23
举报
文章被收录于专栏:算法修养算法修养

Bear and Displayed Friends time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard 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

其实没必要用优先队列的

代码语言:javascript
复制
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <math.h>
#include <queue>

using namespace std;
#define MAX 150000
int n,k,q1;
struct Node
{
    int pos;
    int value;
    friend bool operator <(Node a,Node b)
    {
        return a.value>b.value;
    }
}a[MAX+5];
int tag[MAX+5];
int main()
{
    int x,y;
    scanf("%d%d%d",&n,&k,&q1);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i].value);
        a[i].pos=i;
    }
    priority_queue<Node> q;
    memset(tag,0,sizeof(tag));
    for(int i=1;i<=q1;i++)
    {
        scanf("%d%d",&x,&y);
        if(x==1)
        {
            if(q.size()<k)
            {
                q.push(a[y]);
                tag[y]=1;
            }
            else
            {
                Node term=q.top();
                if(a[y].value>term.value)
                {
                    q.pop();
                    tag[term.pos]=0;
                    q.push(a[y]);
                    tag[y]=1;
                }
            }
        }
        else if(x==2)
        {
            if(tag[y])
                printf("YES\n");
            else
                printf("NO\n");
        }

    }
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-04-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档