Gym 102091K The Stream of Corning 2【线段树】
<题目链接>
题目大意:
进行两种操作:1.给定一个数的出现时间、价值、消失时间;
2.进行一次询问,问你当前时间,第K大的数的价值。
解题分析:
采用离线集中处理,将每个数的出现时间和它的消失时间分组存下,并且存下所有的询问。然后就是依次进行所有询问,将这些询问时间点之前的点插入,将已经消失的点删除。因为算了一下复杂度感觉能过,所以就没有用离散化,线段树的代表区间大小就是1~1e6,线段树的节点维护的信息就是这个节点所对应区间的有效节点个数。
#include <bits/stdc++.h>
using namespace std; const int N = 1e5+ , MAX = 1e6+; #define lson rt<<1,l,mid
#define rson rt<<1|1,mid+1,r
struct Node{
int time,val;
Node (int _time=,int _val=):time(_time),val(_val){}
bool operator < (const Node & tmp) const { return time<tmp.time; }
}node1[N],node2[N],d[N]; int tr[MAX<<]; template<typename T>
inline void read(T&x){
x=;int f=;char ch=getchar();
while(ch<'' ||ch>''){ if(ch=='-')f=-; ch=getchar(); }
while(ch>='' && ch<=''){ x=x*+ch-''; ch=getchar(); }
x*=f;
} inline void Pushup(int rt){ tr[rt]=tr[rt<<]+tr[rt<<|]; }
void update(int rt,int l,int r,int loc,int val){
if(l==r){ tr[rt]+=val;return; }
int mid=l+r>>;
if(loc<=mid)update(lson,loc,val);
if(loc>mid)update(rson,loc,val);
Pushup(rt);
}
int query(int rt,int l,int r,int k){
if(l==r)return l;
int mid=l+r>>;
if(tr[rt<<]>=k)return query(lson,k);
else if(tr[rt<<]<k)return query(rson,k-tr[rt<<]); //左子树不够k个,则第k个一定在右子树
}
int main(){
int T,ncase=;scanf("%d",&T);
while(T--){
printf("Case %d:\n",++ncase);
int q;scanf("%d",&q);
int cnt1=,cnt2=,cnt3=;
while(q--){
int op;read(op);
if(op==){
int s,e,w;read(s);read(w);read(e);
cnt1++,cnt2++;
node1[cnt1]=Node(s,w); //node1记录开始时间
node2[cnt2]=Node(e,w); //node2记录结束时间
}else {
int now,k;read(now),read(k);
cnt3++;
d[cnt3].time=now,d[cnt3].val=k; //记录下询问数组
}
}
sort(node1+,node1++cnt1);sort(node2+,node2++cnt2); sort(d+,d++cnt3);
int p1=,p2=; //遍历‘建立’和‘删除’这两个数组的指针
memset(tr,,sizeof(tr)); //建树
for(int i=;i<=cnt3;i++){
int now=d[i].time,k=d[i].val;
while(p1<=cnt1 && node1[p1].time<=now){ //将当前时间前存活的的点插入线段树
update(,,MAX,node1[p1].val,);
p1++;
}
while(p2<=cnt2 && node2[p2].time<now){ //将当前时间前死亡的点删除线段树
update(,,MAX,node2[p2].val,-);
p2++;
}
if(tr[]<k){ puts("-1");continue; } //如果不足k个存活,直接输出-1
printf("%d\n",query(,,MAX,k));
}
}
}
Gym 102091K The Stream of Corning 2【线段树】的更多相关文章
- Gym 100507C Zhenya moves from parents (线段树)
Zhenya moves from parents 题目链接: http://acm.hust.edu.cn/vjudge/contest/126546#problem/C Description Z ...
- The Stream of Corning 2( 权值线段树/(树状数组+二分) )
题意: 有两种操作:1.在[l,r]上插入一条值为val的线段 2.问p位置上值第k小的线段的值(是否存在) 特别的,询问的时候l和p合起来是一个递增序列 1<=l,r<=1e9:1< ...
- 组队训练 K K - The Stream of Corning 2
K - The Stream of Corning 2 这个题目不是很难,因为给你的这个S是单调递增的,所以就用优先队列+权值线段树就可以很快的解决了. 这个+读入挂可以优化,不过不用也没关系. #i ...
- Codeforces Gym 100803G Flipping Parentheses 线段树+二分
Flipping Parentheses 题目连接: http://codeforces.com/gym/100803/attachments Description A string consist ...
- Codeforces Gym 100231B Intervals 线段树+二分+贪心
Intervals 题目连接: http://codeforces.com/gym/100231/attachments Description 给你n个区间,告诉你每个区间内都有ci个数 然后你需要 ...
- Codeforces Gym 100513F F. Ilya Muromets 线段树
F. Ilya Muromets Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513/probl ...
- Codeforces GYM 100114 D. Selection 线段树维护DP
D. Selection Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Descriptio ...
- 【线段树】BAPC2014 E Excellent Engineers (Codeforces GYM 100526)
题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...
- K. Random Numbers(Gym 101466K + 线段树 + dfs序 + 快速幂 + 唯一分解)
题目链接:http://codeforces.com/gym/101466/problem/K 题目: 题意: 给你一棵有n个节点的树,根节点始终为0,有两种操作: 1.RAND:查询以u为根节点的子 ...
随机推荐
- Jenkins二 安装gitlab及其使用
git --version 如果没有安装git直接源码安装即可,如果安装了先删除原来的git. yum -y remove git先安装编译git需要的包. yum install zlib-deve ...
- java怎样将一组对象传入Oracle存储过程
注:本文来源 < java怎样将一组对象传入Oracle存储过程 > java怎样将一组对象传入Oracle存储过程 java怎样将一组对象传入Oracle存储过程.须要注意的是jar ...
- linux基础实操四
实操一: 1)为新加的硬盘分区,一个主分区大小为10剩余空间给扩展分区,在扩展分区上划分2个逻辑分别为5G 2)式化主分区为ext3系统 #mkfs.ext3 /dev/sdb1 3 将逻辑分区设置为 ...
- php回调函数的概念及实例
php提供了两个内置函数call_user_func()和call_user_func_array()提供对回调函数的支持.这两个函数的区别是call_user_func_array是以数组的形式接收 ...
- java----DOS命令
dir /? 查看帮助 dir /s 查看当前的目录,以及子目录
- API接口加密方式说明
标签: 接口 2016年10月11日 19:41:20 13299人阅读 评论(0) 收藏 举报 分类: API(5) 版权声明:本文为博主原创文章,未经博主允许不得转载. http://blog ...
- pycharm安装mysql驱动包
新的环境配置pycharm的项目时,发现pycharm不能连接到mysql数据库.由于安了java环境但是还没配置相关的库,并且jetbrains家的IDE一般都是java写的,于是猜想可能是java ...
- 洛谷 P1217
题目链接如下https://www.luogu.org/problemnew/show/P1217 找出a到b 是回文数并且是素数的数. 这还不简单 前两天刚学的线性筛素数.卡卡卡卡一顿猛敲.最后一个 ...
- MyEclipse和tomcat结合编写jsp对于中文乱码的解决方法
一.Java和jsp 中文乱码原因和解决方法: Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦.原因有两方面: 第一方面:J ...
- Web.Config引入配置ConfigSource
1.配置文件要和Config文件通一个项目 2.注意路径的写法 3.appSettings和connectionStrings等都可以设置configSource 4.这样发布到不同的环境的时候,改动 ...