题目链接:

GTW likes gt

 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
输出样例
3

题意:

不说了;

思路:

这是一个模拟题;可以用队列的出队模拟被消灭,开两个队列表示不同的组别,然而一般的队列的复杂度跟数组的没区别,所以得用优先队列来降低复杂度;
那么问题的难点就变成了怎么定义优先级了;
我们从第一个gt一直到第n个gt,依次入队,在入队的同时要保证不同组别即另一个队列里的比他小的都出队;
所以我们要按能力的值大小定义优先级,但是能力的大小在变化,这可难办了;
我们发现,在i秒发功,那么从1到n都将加1,我们可以把b[i]-前i秒的发功次数定义成优先级就可以在判断是否出队的时候队列里的排列是单调的了;
具体的看代码解释; AC代码:
/*    5596    234MS    2764K    1585 B    G++    LittlePointer*/
#include <bits/stdc++.h>
using namespace std;
const int N=5e4+;
typedef long long ll;
const ll mod=1e9+;
int t,n,m,x,flag[N],dp[N];
struct node
{
friend bool operator<(node x,node y)
{
return x.fnum>y.fnum;
}
int ki,num,pos,fnum;
};
node po[N];
priority_queue<node>qu1,qu2;
int main()
{
scanf("%d",&t);
while(t--)
{
while(!qu1.empty())qu1.pop();
while(!qu2.empty())qu2.pop();
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%d%d",&po[i].ki,&po[i].num);
po[i].pos=i;
}
memset(flag,,sizeof(flag));
for(int i=;i<m;i++)
{
scanf("%d",&x);
flag[x]++;
}
dp[]=;
for(int i=;i<=n;i++)
{
dp[i]=dp[i-]+flag[i];//dp[i]表示前i秒的发功次数;
po[i].fnum=po[i].num-dp[i-];
}
int cnt=;
for(int i=;i<=n;i++)
{
if(po[i].ki==)
{
qu1.push(po[i]);
while(!qu2.empty())
{
node fr=qu2.top();
if(fr.fnum+dp[i]<po[i].num+flag[i])qu2.pop();//dp[i]是不变的fr.fnum+dp[i]=fr.num+dp[i]-dp[fr.pos-1];
else break;//单纯的比较fr.num+dp[i]与po[i].num+flag[i]是不对的;
}
}
else
{
qu2.push(po[i]);
while(!qu1.empty())
{
node fr=qu1.top();
if(fr.fnum+dp[i]<po[i].num+flag[i])qu1.pop();
else break;
}
}
}
printf("%d\n",qu1.size()+qu2.size());
}
return ;
}

hdu-5596 GTW likes gt(模拟+优先队列)的更多相关文章

  1. HDU 5596 GTW likes gt 倒推

    GTW likes gt 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5596 Description Long long ago, there w ...

  2. hdu 5596 GTW likes gt

    题目链接: hdu 5596 题意不难懂(虽然我还是看了好久)大概就是说 n 个人排成一列,分成两组, 第 i 秒时第 i 个人会消灭掉前面比他 b[i] 值低的且和他不同组的人,c[i] 表示第 c ...

  3. HDU 5596 ——GTW likes gt——————【想法题】

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

  4. HDU 5597 GTW likes function 打表

    GTW likes function 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5596 Description Now you are give ...

  5. HDU 1103 Flo's Restaurant(模拟+优先队列)

    Flo's Restaurant Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  6. hdu 5437 Alisha’s Party 模拟 优先队列

    Problem Description Princess Alisha invites her friends to come to her birthday party. Each of her f ...

  7. HDU 5597 GTW likes function 欧拉函数

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5597 题意: http://bestcoder.hdu.edu.cn/contests/contes ...

  8. Hdu 5595 GTW likes math

    题意: 问题描述 某一天,GTW听了数学特级教师金龙鱼的课之后,开始做数学<从自主招生到竞赛>.然而书里的题目太多了,GTW还有很多事情要忙(比如把妹),于是他把那些题目交给了你.每一道题 ...

  9. hdu 5595 GTW likes math(暴力枚举查询)

    思路:直接暴力枚举区间[l,r]的整数值,然后max和min就可以了. AC代码: #pragma comment(linker, "/STACK:1024000000,1024000000 ...

随机推荐

  1. ssh登录时不校验被登录机器的方法

    在linux的用户目录下的.ssh文件下,touch config:注意config的权限控制,-rw-r--r--. 配置内容: cat config: Host * StrictHostKeyCh ...

  2. Opencv 改进的外接矩形合并拼接方法

    上一篇中的方法存在的问题是矩形框不够精确,而且效果不能达到要求 这里使用凸包检测的方法,并将原来膨胀系数由20缩小到5,达到了更好的效果 效果图: 效果图: 代码: #include <open ...

  3. Android--------------几个ADB经常使用命令

    1. 显示当前执行的所有模拟器:     adb devices 2. 安装应用程序:     adb install -r 123.apk 3. 获取模拟器中的文件:     adb pull &l ...

  4. C - The C Answer (2nd Edition) - Exercise 1-16

    /* Revise the main routine of the longest-line program so it will correctly print the length of arbi ...

  5. C 标准库 - <stdlib.h>

    C 标准库 - <stdlib.h> 简介 stdlib .h 头文件定义了四个变量类型.一些宏和各种通用工具函数. 库变量 下面是头文件 stdlib.h 中定义的变量类型: 序号 变量 ...

  6. Cursor类用法:

      Cursor类用法:   http://www.2cto.com/kf/201109/103163.html   Ctrl+Shift+G 查找类.方法和属性的引用.这是一个非常实用的快捷键,例如 ...

  7. Tomcat服务器改主页 & jeesite框架改首页

    Tomcat服务器改主页: 方法一: 把原来的 ROOT 目录清空: 发布你自己的项目到 ROOT 目录下: 发布程序 /webapps/ROOT/WEB-INF/web.xml 中需要有默认首页定义 ...

  8. caffe2--ubuntu16.04--14.04--install

    Install Welcome to Caffe2! Get started with deep learning today by following the step by step guide ...

  9. mysql查询sql中检索条件为大批量数据时处理

    当userIdArr数组值为大批量时,应如此优化代码实现

  10. python super()(转载)

    一.问题的发现与提出 在Python类的方法(method)中,要调用父类的某个方法,在Python 2.2以前,通常的写法如代码段1: 代码段1: class A: def __init__(sel ...