BestCoder Round #66 1002
GTW likes gt
Long long ago, there were nn adorkable GT. Divided into two groups, they were playing games together, forming a column. The i−th GT would randomly get a value of ability bi. At the i−th second, the i−th GT would annihilate GTs who are in front of him, whose group differs from his, and whose value of ability is less than his.
In order to make the game more interesting, GTW, the leader of those GTs, would emit energy for mm times, of which the i−th time of emitting energy is ci. After the ci second, b1,b2,...,bci would all be added 1.
GTW wanted to know how many GTs would survive after the n−th second.
The first line of the input file contains an integerT(≤5), which indicates the number of test cases.
For each test case, there are n+m+1 lines in the input file.
The first line of each test case contains 2 integers nn and mm, which indicate the number of GTs and the number of emitting energy, respectively.(1≤n,m≤50000)
In the following nn lines, the i−th line contains two integers ai and bi, which indicate the group of the i−th GT and his value of ability, respectively. (0≤ai≤1,1≤bi≤10^6)
In the following mm lines, the i−th line contains an integer ci, which indicates the time of emitting energy for i−th time.
There should be exactly T lines in the output file.
The i−th line should contain exactly an integer, which indicates the number of GTs who survive.
1
4 3
0 3
1 2
0 3
1 1
1
3
4
3
After the first seconds,b1=4,b2=2,b3=3,b4=1 After the second seconds,b1=4,b2=2,b3=3,b4=1 After the third seconds,b1=5,b2=3,b3=4,b4=1,and the second GT is annihilated by the third one. After the fourth seconds,b1=6,b2=4,b3=5,b4=2 ci is unordered.
GTW likes gt
从前,有nn只萌萌的GT,他们分成了两组在一起玩游戏。他们会排列成一排,第i只GT会随机得到一个能力值bi。在第i秒的时候,第i只GT可以消灭掉所有排在他前面的和他不是同一组的且能力值小于他的GT。
为了使游戏更加有趣,GT的首领GTW会发功mm次,第ii次发功的时间为ci,则在第ci秒结束后,b1,b2,...,bci都会增加1。
现在,GTW想知道在第nn秒之后,会有几只GT存活下来。
第一行只有一个整数T(T≤5),表示测试数据组数。
第二行有两个整数n,m。表示GT的个数和GTW发功的次数。( 500001≤n≤50000,1≤m≤50000)
第三到n+2行,每行有两个整数ai,bi,表示第ii只GT在哪个组和他的能力值 (0≤a[i]≤1,1≤b[i]≤106)
第n+3行到第n+m+2行,每行有一个整数ci,表示GTW第i次发功的时间。 1≤c[i]≤n
总共T行,第i行表示第i组数据中,GT存活的个数。
1
4 3
0 3
1 2
0 3
1 1
1
3
4
3
第1秒后 能力值为4 2 3 1
第2秒后 能力值为4 2 3 1
第3秒后 能力值为5 3 4 1,第2只GT被第3只GT消灭掉了
第4秒后 能力值为6 4 5 2
ci并不是有序的
我们先通过题意先计算出最后他们有多少能力值,然后,我们用两个容器分别装他们,如果可以干掉,就把它删除,然后就两个容器大小之和就好
#include<stdio.h>
//#include<bits/stdc++.h>
#include<string.h>
#include<iostream>
#include<math.h>
#include<sstream>
#include<set>
#include<queue>
#include<map>
#include<vector>
#include<algorithm>
#include<limits.h>
#define inf 0x3fffffff
#define INF 0x3f3f3f3f
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define ULL unsigned long long
using namespace std;
map<int,int> q;
multiset<int> q0;
multiset<int> q1;
multiset<int>::iterator it;
int i,j;
int t;
int n,m;
struct P
{
int a,b;
}L[100000];
int c;
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d%d",&L[i].a,&L[i].b);
}
for(i=1;i<=m;i++)
{
scanf("%d",&c);
q[c]++;
}
for(i=n-1;i>=1;i--)
{
q[i]+=q[i+1];
}
for(i=1;i<=n;i++)
{
L[i].b+=q[i];
// cout<<L[i].b<<endl;
}
for(i=1;i<=n;i++)
{
if(L[i].a==0)
{
while(q1.size())
{
it=q1.begin();
if(*it<L[i].b)
{
q1.erase(it);
}
else
{
break;
}
}
q0.insert(L[i].b);
}
else if(L[i].a==1)
{
while(q0.size())
{
it=q0.begin();
if(*it<L[i].b)
{
q0.erase(it);
}
else
{
break;
}
}
q1.insert(L[i].b);
}
}
// cout<<q0.size()+q1.size()<<endl;
printf("%d\n",q0.size()+q1.size());
q.clear();q0.clear();q1.clear();
} return 0;
}
BestCoder Round #66 1002的更多相关文章
- 暴力+降复杂度 BestCoder Round #39 1002 Mutiple
题目传送门 /* 设一个b[]来保存每一个a[]的质因数的id,从后往前每一次更新质因数的id, 若没有,默认加0,nlogn复杂度: 我用暴力竟然水过去了:) */ #include <cst ...
- 矩阵快速幂---BestCoder Round#8 1002
当要求递推数列的第n项且n很大时,怎么快速求得第n项呢?可以用矩阵快速幂来加速计算.我们可以用矩阵来表示数列递推公式比如fibonacci数列 可以表示为 [f(n) f(n-1)] = [f(n ...
- 贪心/二分查找 BestCoder Round #43 1002 pog loves szh II
题目传送门 /* 贪心/二分查找:首先对ai%=p,然后sort,这样的话就有序能使用二分查找.贪心的思想是每次找到一个aj使得和为p-1(如果有的话) 当然有可能两个数和超过p,那么an的值最优,每 ...
- Manacher BestCoder Round #49 ($) 1002 Three Palindromes
题目传送门 /* Manacher:该算法能求最长回文串,思路时依据回文半径p数组找到第一个和第三个会文串,然后暴力枚举判断是否存在中间的回文串 另外,在原字符串没啥用时可以直接覆盖,省去一个数组空间 ...
- 二分图判定+点染色/并查集 BestCoder Round #48 ($) 1002 wyh2000 and pupil
题目传送门 /* 二分图判定+点染色:因为有很多联通块,要对所有点二分图匹配,若不能,存在点是无法分配的,no 每一次二分图匹配时,将点多的集合加大最后第一个集合去 注意:n <= 1,no,两 ...
- hdu 5195 DZY Loves Topological Sorting BestCoder Round #35 1002 [ 拓扑排序 + 优先队列 || 线段树 ]
传送门 DZY Loves Topological Sorting Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131 ...
- BestCoder Round #66 (div.2) 1002
GTW likes gt Accepts: 132 Submissions: 772 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- BestCoder Round #56 1002 Clarke and problem 1003 Clarke and puzzle (dp,二维bit或线段树)
今天第二次做BC,不习惯hdu的oj,CE过2次... 1002 Clarke and problem 和Codeforces Round #319 (Div. 2) B Modulo Sum思路差不 ...
- BestCoder Round #92 1002 Count the Sheep —— 枚举+技巧
题目链接:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=748&pid=1002 题解: 做题的时候只是想到 ...
随机推荐
- C++——virtual
一.放在父类的函数名前面:多态 1.作用:实现多态:子类可以自定义父类中的virtual函数 #include <iostream> using namespace std; class ...
- 简单的jQuery前端验证码校验
简单的jQuery前端验证码校验2 html; <!DOCTYPE html> <html lang="zh-cn"> <head> <m ...
- tar打包tar.gz文件
命令格式: tar zcvf dir.tar.gz ./dir 压缩后的文件解压出来会是dir这个文件夹
- latex公式怎么变成图片格式
由于这几天正在复习高中的数学,想写一些博客记录一下,发现数学公式的输入是一个问题,后来知道了latex,去youtube学习了一点入门教程发现挺简单的,不过有一个问题,latex生成的是pdf格式啊, ...
- loj10100 网络
这个题目描述好难理解呀qwq... 传送门 分析 在读懂题之后我们不难发现这道题实际就是在求一张图中有多少个割点.只需要注意读入方式即可. 代码 #include<iostream> #i ...
- (数组)Largest Rectangle in Histogram(栈解问题)
Largest Rectangle in Histogram Given n non-negative integers representing the histogram's bar height ...
- python 根据字典中的key,value进行排序
#coding=utf-8 import requests,json,collections,base64,datetime def sort(datas): data=json.dumps(data ...
- MVC之htmlhelper总结
自学习mvc以来,htmlhelper使用的也非常多,下面开始总结一下吧,由于本人比较懒,内容大部分摘自slark.net的笔记, 有人问为什么用这个htmlhelper,我就喜欢用原生的标签,这个按 ...
- C#用GDI+解析Json文件绘制Chart
using System.Collections.Generic; namespace Chart { public class Program { static void Main(string[] ...
- 将Winform程序及dll打包成可执行的exe
使用场景 通常开发的Winform程序,引用了其他类库后,在输出目录下都会产生很多DLL文件,exe执行时必须依赖这些DLL.想要Winform程序只有一个可执行exe文件,又不想打包成安装包,就可以 ...