VK Cup 2016 - Round 1 (Div. 2 Edition)-B - Bear and Displayed Friends-STL(维护前k大)
2016-03-29 13:07
465 查看
http://codeforces.com/contest/658/problem/B
题意 给n,k,q;
就是让你维护一个kmax的集合
q次操作
操作1 把 节点v加入kmax集合,
操作2 查询v是否在集合里
直接用multiset。就好了。。
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <iostream>
using namespace std;
const double pi=acos(-1.0);
double eps=0.000001;
__int64 min(__int64 a,__int64 b)
{return a<b?a:b;}
__int64 max(__int64 a,__int64 b)
{return a>b?a:b;}
struct node
{
int x,val;
node(){}
node(int a,int b){x=a,val=b;}
bool operator <(const node &b) const
{
return val<b.val;//最小值优先
}
bool operator ==(const node &b) const
{
return x==b.x;
}
};
multiset<node> q;
int n,k,qq;
int t[150005];
node tmp[8];
int main()
{ int i,j;
scanf("%d%d%d",&n,&k,&qq);
for (i=1;i<=n;i++)
scanf("%d",&t[i]);
int cur=0,x,y;
for (i=1;i<=qq;i++)
{
scanf("%d%d",&x,&y);
if (x==1)
{
if (cur<k)
{
q.insert(node(y,t[y]));
cur++;
}
else
{
q.insert(node(y,t[y]));
// printf("%d\n",q.begin()->x);
q.erase(q.begin());
}
}
else
{
int flag=0;
if (q.find(node(y,t[y]))!=q.end())
flag=1;
if (flag) printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}
题意 给n,k,q;
就是让你维护一个kmax的集合
q次操作
操作1 把 节点v加入kmax集合,
操作2 查询v是否在集合里
直接用multiset。就好了。。
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <iostream>
using namespace std;
const double pi=acos(-1.0);
double eps=0.000001;
__int64 min(__int64 a,__int64 b)
{return a<b?a:b;}
__int64 max(__int64 a,__int64 b)
{return a>b?a:b;}
struct node
{
int x,val;
node(){}
node(int a,int b){x=a,val=b;}
bool operator <(const node &b) const
{
return val<b.val;//最小值优先
}
bool operator ==(const node &b) const
{
return x==b.x;
}
};
multiset<node> q;
int n,k,qq;
int t[150005];
node tmp[8];
int main()
{ int i,j;
scanf("%d%d%d",&n,&k,&qq);
for (i=1;i<=n;i++)
scanf("%d",&t[i]);
int cur=0,x,y;
for (i=1;i<=qq;i++)
{
scanf("%d%d",&x,&y);
if (x==1)
{
if (cur<k)
{
q.insert(node(y,t[y]));
cur++;
}
else
{
q.insert(node(y,t[y]));
// printf("%d\n",q.begin()->x);
q.erase(q.begin());
}
}
else
{
int flag=0;
if (q.find(node(y,t[y]))!=q.end())
flag=1;
if (flag) printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}
相关文章推荐
- linux下删除空行的几种方法
- Linux入门
- Linux 下使用 Eclipse 调试 apache 模块
- boost scroped_str使用
- hadoop从安装到布署
- op cache config
- python 调用shell命令三种方法
- python 调用shell命令三种方法
- openfile
- TransactionScope 之分布式配置
- 通过隐藏option实现select的联动效果
- runloop
- 重新设置Tomcat管理员用户名和密码(v8.0)
- 【Java学习-J.160328.0.2】笔记1-Linux基础
- linux修改max user processes limits
- 优化算法动画演示Alec Radford's animations for optimization algorithms
- <div+css页面布局课堂笔记>11---页面布局网站首页设计实例__终极版(仿csdn首页)
- Docker Image
- How can enable udev sync successfully in docker?
- Hadoop完全分布式集群安装