<题目链接>

题目大意:

进行两种操作: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【线段树】的更多相关文章

  1. Gym 100507C Zhenya moves from parents (线段树)

    Zhenya moves from parents 题目链接: http://acm.hust.edu.cn/vjudge/contest/126546#problem/C Description Z ...

  2. The Stream of Corning 2( 权值线段树/(树状数组+二分) )

    题意: 有两种操作:1.在[l,r]上插入一条值为val的线段 2.问p位置上值第k小的线段的值(是否存在) 特别的,询问的时候l和p合起来是一个递增序列 1<=l,r<=1e9:1< ...

  3. 组队训练 K K - The Stream of Corning 2

    K - The Stream of Corning 2 这个题目不是很难,因为给你的这个S是单调递增的,所以就用优先队列+权值线段树就可以很快的解决了. 这个+读入挂可以优化,不过不用也没关系. #i ...

  4. Codeforces Gym 100803G Flipping Parentheses 线段树+二分

    Flipping Parentheses 题目连接: http://codeforces.com/gym/100803/attachments Description A string consist ...

  5. Codeforces Gym 100231B Intervals 线段树+二分+贪心

    Intervals 题目连接: http://codeforces.com/gym/100231/attachments Description 给你n个区间,告诉你每个区间内都有ci个数 然后你需要 ...

  6. Codeforces Gym 100513F F. Ilya Muromets 线段树

    F. Ilya Muromets Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513/probl ...

  7. Codeforces GYM 100114 D. Selection 线段树维护DP

    D. Selection Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Descriptio ...

  8. 【线段树】BAPC2014 E Excellent Engineers (Codeforces GYM 100526)

    题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...

  9. K. Random Numbers(Gym 101466K + 线段树 + dfs序 + 快速幂 + 唯一分解)

    题目链接:http://codeforces.com/gym/101466/problem/K 题目: 题意: 给你一棵有n个节点的树,根节点始终为0,有两种操作: 1.RAND:查询以u为根节点的子 ...

随机推荐

  1. Oracle12c从入门到精通(第二版) PDF 下载

    一:下载地址: 二:本书图样 三本书目录 前言 第一章 Oracle数据库概述 第二章 Oracle在Windows 8上的安装与配置 第三章 SQL基础 第四章 Oracle PL/SQL及编程 第 ...

  2. Confluence 6 自定义 Decorator 模板的宏和针对高级用户

    宏 页面的某些部分使用的是 Velocity  宏进行创建的,包括导航栏.有关宏的创建,你可以参考页面 Working With Decorator Macros 页面中的内容. 针对高级用户 vel ...

  3. Confluence 6 修改站点的标识图片

    你可以通过修改标识图片(Logos)来修改你 Confluence 站点的外观和感觉. 你可以修改: 站点标识图片(site logo) 为所有空间修改默认空间标识图片(default space l ...

  4. SS-QT5

    https://blog.csdn.net/sos218909/article/details/78781017

  5. http之理解304

    原文:http://www.cnblogs.com/ziyunfei/archive/2012/11/17/2772729.html 如果客户端发送的是一个条件验证(Conditional Valid ...

  6. nginx之请求限制与连接限制

    模块limit_conn_module与limit_req_module limit_conn_module语法 limit_req_module语法 附: http长连接与短连接

  7. 用D3.js画的人物关系demo

    代码下载地址:https://github.com/zhangzn3/group-explorer ### Demo1功能 *** * 支持节点拖拽 * 支持节点拖拽并固定位置 * 支持鼠标浮到节点显 ...

  8. LeetCode(75):分类颜色

    Medium! 题目描述: 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 ...

  9. MySQL报错: Character set ‘utf8mb4‘ is not a compiled character set and is not specified in the ‘/usr/share/mysql/charsets/Index.xml‘ file

    由于日常程序使用了字符集utf8mb4,为了避免每次更新时,set names utf8mb4,就把配置文件改了,如下: [root@~]# vim /etc/my.cnf #my.cnf [clie ...

  10. python no module named builtins

    使用python2时出现此错误. 解决办法: pip install future