GTW likes gt

 Accepts: 132
 Submissions: 772
 Time Limit: 2000/1000 MS (Java/Others)
 Memory Limit: 131072/131072 K (Java/Others)
问题描述
从前,有nn只萌萌的GT,他们分成了两组在一起玩游戏。他们会排列成一排,第ii只GT会随机得到一个能力值b_ib​i​​。在第ii秒的时候,第ii只GT可以消灭掉所有排在他前面的和他不是同一组的且能力值小于他的GT。
为了使游戏更加有趣,GT的首领GTW会发功mm次,第ii次发功的时间为c_ic​i​​,则在第c_ic​i​​秒结束后,b_1,b_2,...,b_{c_i}b​1​​,b​2​​,...,b​c​i​​​​都会增加1。
现在,GTW想知道在第nn秒之后,会有几只GT存活下来。
输入描述
第一行只有一个整数T(T\leq 5)T(T≤5),表示测试数据组数。
第二行有两个整数n,mn,m。表示GT的个数和GTW发功的次数。(1\leq n \leq 50000,1\leq m\leq 500001≤n≤50000,1≤m≤50000)
第三到n+2n+2行,每行有两个整数a_i,b_ia​i​​,b​i​​,表示第ii只GT在哪个组和他的能力值 (0\leq a[i]\leq 1,1\leq b[i]\leq 10^6)(0≤a[i]≤1,1≤b[i]≤10​6​​)
第n+3n+3行到第n+m+2n+m+2行,每行有一个整数c_ic​i​​,表示GTW第ii次发功的时间。1\leq c[i]\leq n1≤c[i]≤n
输出描述
总共TT行,第ii行表示第ii组数据中,GT存活的个数。
输入样例
1
4 3
0 3
1 2
0 3
1 1
1
3
4
输出样例
Hint
第11秒后 能力值为4\ 2\ 3\ 14 2 3 1
第22秒后 能力值为4\ 2\ 3\ 14 2 3 1
第33秒后 能力值为5\ 3\ 4\ 15 3 4 1,第22只GT被第33只GT消灭掉了
第44秒后 能力值为6\ 4\ 5\ 26 4 5 2
c_ic​i​​并不是有序的
思路:其实很简单,把前Ci个数字+1意味着把后面n-Ci个数字-1,只需要用一个datle数组记录到哪一个改偏移多少就好,现在就是解决如何快速删除前面比当前小的元素的问题,很简单,用优先队列就可以实现logn的操作,代码如下
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int const maxn=;
int inibo[maxn],inival[maxn],sptr,datle[maxn];
priority_queue< int,vector< int >,greater< int > > a,b;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n,m;
scanf("%d%d",&n,&m);
while(!a.empty())
a.pop();
while(!b.empty())
b.pop();
for(int i=;i<=n;i++)
{
scanf("%d%d",&inibo[i],&inival[i]);
}
memset(datle,,sizeof(datle));
for(int i=;i<=m;i++)
{
int temp;
scanf("%d",&temp);
datle[temp+]++;
}
for(int i=;i<=maxn-;i++)
{
datle[i]+=datle[i-];
}
sptr=;
for(int i=;i<=n;i++)
{
int temp=inival[i]-datle[i];
//printf("%d\n",temp);
int bo=inibo[i];
if(bo)
{
while(!a.empty()&&a.top()<temp)
{
//printf("aaapop%d %d %d\n",i,temp,a.top());
a.pop();
}
b.push(temp);
}
else
{
while(!b.empty()&&b.top()<temp)
{
//printf("bbbpop%d %d %d\n",i,temp,b.top());
b.pop();
}
a.push(temp);
}
}
int ans=a.size()+b.size();
printf("%d\n",ans);
}
return ;
}

题目很简单,主要是想记录下优先队列的相关操作

#include<queue>

priority_queue< int,vector< int >,greater< int > > a,b;//小根堆

priority_queue<int> Q;//大根堆less

int a[5]={3,4,5,2,1};
priority_queue<int> Q(a,a+5);//构造函数
 
 struct node
 {
    int priority;
     int value;
     friend bool operator < (node n1, node n2)  //操作符重载(重载小于号得到大根堆)
     {
         return n1.priority < n2.priority;
     }
 };
priority_queue<node> qn;//自定义排序方式
 
 struct board
{
    int h;
    int x;
    int y;
    bool operator < (const board &p) const //直接重载
    {
        return this->h<p.h;
    }
};
priority_queue<board> q;
 
 
empty() 如果优先队列为空,则返回真 
pop() 删除第一个元素 
push() 加入一个元素 
size() 返回优先队列中拥有的元素的个数 
top() 返回优先队列中有最高优先级的元素
 

BestCoder Round #66 (div.2) 1002的更多相关文章

  1. 简单几何(水)BestCoder Round #50 (div.2) 1002 Run

    题目传送门 /* 好吧,我不是地球人,这题只要判断正方形就行了,正三角形和正五边形和正六边形都不可能(点是整数). 但是,如果不是整数,那么该怎么做呢?是否就此开启计算几何专题了呢 */ /***** ...

  2. BestCoder Round #66 (div.2)

    构造 1002 GTW likes gt 题意:中文题面 分析:照着题解做的,我们可以倒着做,记一下最大值,如果遇到了修改操作,就把最大值减1,然后判断一下这个人会不会被消灭掉,然后再更新一下最大值. ...

  3. BestCoder Round #66 (div.2)B GTW likes gt

    思路:一个O(n)O(n)的做法.我们发现b_1,b_2,...,b_xb​1​​,b​2​​,...,b​x​​都加11就相当于b_{x+1},b_{x+2},...,b_nb​x+1​​,b​x+ ...

  4. HDU5597/BestCoder Round #66 (div.2) GTW likes function 打表欧拉函数

    GTW likes function      Memory Limit: 131072/131072 K (Java/Others) 问题描述 现在给出下列两个定义: f(x)=f_{0}(x)=\ ...

  5. HDU5596/BestCoder Round #66 (div.2) 二分BIT/贪心

    GTW likes gt    Memory Limit: 131072/131072 K (Java/Others) 问题描述 从前,有nn只萌萌的GT,他们分成了两组在一起玩游戏.他们会排列成一排 ...

  6. HDU 5596/BestCoder Round #66 (div.2) GTW likes math 签到

    GTW likes math  Memory Limit: 131072/131072 K (Java/Others) 问题描述 某一天,GTW听了数学特级教师金龙鱼的课之后,开始做数学<从自主 ...

  7. BestCoder Round #66 (div.2) hdu5592

    GTW likes math Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  8. BestCoder Round #68 (div.2) 1002 tree

    题意:给你一个图,每条边权值0或1,问每个点周围最近的点有多少个? 思路:并查集找权值为0的点构成的连通块. #include<stdio.h> #include<string.h& ...

  9. BestCoder Round #50 (div.1) 1002 Run (HDU OJ 5365) 暴力枚举+正多边形判定

    题目:Click here 题意:给你n个点,有多少个正多边形(3,4,5,6). 分析:整点是不能构成正五边形和正三边形和正六边形的,所以只需暴力枚举四个点判断是否是正四边形即可. #include ...

随机推荐

  1. shopping car 2.0

    #!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2018/5/13 0013 10:20# @Author : Anthony.Waa# @ ...

  2. Android之Action Bar

    Action Bar在实际应用中,很好地为用户提供了导航,窗口位置标识,操作点击等功能.它出现于Android3.0(API 11)之后的版本中,在2.1之后的版本中也可以使用. 添加与隐藏Actio ...

  3. 什么是 HTML5?

    HTML5 是下一代的 HTML. 什么是 HTML5? HTML5 将成为 HTML.XHTML 以及 HTML DOM 的新标准. HTML 的上一个版本诞生于 1999 年.自从那以后,Web ...

  4. 百度地图api的简单应用

    百度地图api 获取经纬度(通过浏览器的) //获取经纬度 window.navigator.geolocation.getCurrentPosition(function(position) { a ...

  5. 实验7 OpenGL光照

    一.实验目的: 了解掌握OpenGL程序的光照与材质,能正确使用光源与材质函数设置所需的绘制效果. 二.实验内容: (1)下载并运行Nate Robin教学程序包中的lightmaterial程序,试 ...

  6. SPL类

    用途:对类,方法,属性,参数的提取生成文档:自动加载插件 实列化类同于new:$ref = new ReflectionClass($classname);$class = $ref->newI ...

  7. spring rest docs自定义代码片段

    Spring rest docs 文档插件在生成文档时会默认生成6个代码片段,自适应生成其它片段.通过阅读官方文档发现其可以自定义生成的代码片段,但是官方只说了可以自定义模版,修改现有的代码片段的方法 ...

  8. Nginx Location指令配置及常用全局变量

    ./configure的含义 在实践安装nginx的时候,不知道./configure是什么意思,这里特地记录一下. 在linux中./代表当前目录,属于相对路径../代表上一级目录,属于相对路径/代 ...

  9. 实现el-dialog的拖拽,全屏,缩小功能

    基于el-dialog, 封装了一下.,实在懒得写,所以直接把代码 粘出来了 大概粘了一下效果.自己体会把. 组件使用 <el-dialog v-dialogDrag ref="xhz ...

  10. 3.2、Ansible单命令测试

    0.Ansible的group支持all.通配符(*).IP地址 1.查看Ansible的版本 $  ansbile  --version [root@test ~]# ansible --versi ...