洛谷.T21778.过年(线段树 扫描线)
/*
操作按左端点排个序 依次进行即可
不是很懂 为什么不写Build 而在Add时改mp[rt]=p 会WA(too short on line 251..)
找到Reason了。。Modify下界写错
那么为什么单点修改正确性会被下界影响。。
又找到Reason了。。数据有0 mmp
*/
#include<cstdio>
#include<cctype>
#include<algorithm>
#define gc() getchar()
const int N=1e5+5;
int n,m,maxn,pos;
struct Opt
{
int p,k,v;
inline bool operator <(const Opt &a)const {return p<a.p;}
}A[N<<1];
struct Seg_Tree
{
int mx[N<<2],mp[N<<2];
// std::pair<int,int> mx[N<<2];
inline void PushUp(int rt)
{
if(mx[rt<<1]>=mx[rt<<1|1])
mx[rt]=mx[rt<<1], mp[rt]=mp[rt<<1];
else
mx[rt]=mx[rt<<1|1], mp[rt]=mp[rt<<1|1];
// mx[rt]=std::max(mx[rt<<1],mx[rt<<1|1]);//No1相等时按第二关键字升序,初始时取反即可
}
// void Build(int l,int r,int rt)
// {
// if(l==r) mx[rt]=0, mp[rt]=l;//mx[rt]=std::make_pair(0,-l);
// else
// {
// int m=l+r>>1;
// Build(l,m,rt<<1), Build(m+1,r,rt<<1|1);
// PushUp(rt);
// }
// }
void Modify_Add(int l,int r,int rt,int p,int v)
{
if(l==r) mx[rt]+=v, mp[rt]=p;
else
{
int m=l+r>>1;
if(p<=m) Modify_Add(l,m,rt<<1,p,v);
else Modify_Add(m+1,r,rt<<1|1,p,v);
PushUp(rt);
}
}
}t;
inline int read()
{
int now=0,f=1;register char c=gc();
for(;!isdigit(c);c=gc()) if(c=='-') f=-1;
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now*f;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
freopen("2.out","w",stdout);
#endif
n=read(),m=read();
int mn=1e5,mx=1;
for(int i=0;i<m;++i)
{
A[i<<1].p=read(), A[i<<1|1].p=read()+1,
A[i<<1].k= A[i<<1|1].k= read(),
A[i<<1].v=1, A[i<<1|1].v=-1;
mn=std::min(A[i<<1].k,mn), mx=std::max(A[i<<1].k,mx);
}
std::sort(A,A+(m<<1));
A[m<<1].p=n+1;
// t.Build(mn,mx,1);
int cnt=0;
// printf("%d %d\n",mn,mx);
for(int i=1;i<=n;++i)
{
// while(A[cnt].p<=i) t.Modify_Add(0,mx,1,A[cnt].k,A[cnt].v),++cnt;
while(A[cnt].p<=i) t.Modify_Add(mn,mx,1,A[cnt].k,A[cnt].v),++cnt;
// if(t.mx[1].first) printf("%d\n",-t.mx[1].second);
if(t.mx[1]) printf("%d\n",t.mp[1]);
else puts("-1");
}
return 0;
}
洛谷.T21778.过年(线段树 扫描线)的更多相关文章
- 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)
To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...
- 洛谷T21778 过年
题目描述 有 n(1 \leq n \leq 10^5)n(1≤n≤105) 个小朋友,过年了,要发放 m(1 \leq m \leq 10^5)m(1≤m≤105) 次礼物. 每次发放,会给出三个参 ...
- 洛谷 [T21778] 过年
离线扫描线+查分+线段树 我们发现,这个题的询问都是离线的,所以我们尝试用离线扫描线的方法来处理 对于每一次操作,我们维护一个差分数组, 在询问的时候,我们用一根扫描线,从左往右扫,并用线段树维护,每 ...
- 【洛谷】【线段树】P1471 方差
[题目背景:] 滚粗了的HansBug在收拾旧数学书,然而他发现了什么奇妙的东西. [题目描述:] 蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的平均数和方差 ...
- 【洛谷】【线段树】P1047 校门外的树
[题目描述:] 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……,L ...
- 【洛谷】【线段树】P1886 滑动窗口
[题目描述:] 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. [输入格式:] 输入一共 ...
- 【洛谷】【线段树】P3353 在你窗外闪耀的星星
[题目描述:] /* 飞逝的的时光不会模糊我对你的记忆.难以相信从我第一次见到你以来已经过去了3年.我仍然还生动地记得,3年前,在美丽的集美中学,从我看到你微笑着走出教室,你将头向后仰,柔和的晚霞照耀 ...
- 洛谷P5280 [ZJOI2019]线段树
https://www.luogu.org/problemnew/show/P5280 省选的时候后一半时间开这题,想了接近两个小时的各种假做法,之后想的做法已经接近正解了,但是有一些细节问题理不 ...
- 洛谷 - P1198 - 最大数 - 线段树
https://www.luogu.org/problemnew/show/P1198 要问区间最大值,肯定是要用线段树的,不能用树状数组.(因为没有逆元?但是题目求的是最后一段,可以改成类似前缀和啊 ...
随机推荐
- jquery筛选数组之grep、each、inArray、map的用法及遍历son对象(转)
grep [传入的参数为返回bool类型的函数] <script type='text/javascript' src="/jquery.js"></script ...
- linux学习笔记1——指令的基本格式及基本文件操作
从今天开始就正式踏上了linux的学习历程.linux作为绝大多数服务器采用的操作系统,是每个开发人员都非常有必要掌握的操作系统.初学时,我没有直接在电脑上安装linux操作系统,而是采用了虚拟机的方 ...
- 嵌入式系统C编程之错误处理
前言 本文主要总结嵌入式系统C语言编程中,主要的错误处理方式.文中涉及的代码运行环境如下: 一 错误概念 1.1 错误分类 从严重性而言,程序错误可分为致命性和非致命性两类.对于致命性错误,无法执行 ...
- dns轮询
负载均衡最开始一步,利用它实现负载均衡集群的定位
- sql 学习
.查看表结构用desc desc emp; 2.空表dual,最常用的空表,如: select 2 * 4 from dual; select sysdate from dual; 3.双引号 ...
- 100以内奇偶数(for循环)
- python下图像读取方式以及效率对比
https://zhuanlan.zhihu.com/p/30383580 opencv速度最快,值得注意的是mxnet的采用多线程读取的方式,可大大加速
- 【linux】tar压缩不包含路径
-C 参数 文件路径 /home/test/files tar zcvf file.tar.gz -C /home/test files 这样压缩后,就是可以得当一个相对路径的压缩包了,直接排除掉/ ...
- notepad++颜色修改
设置-->>语言格式设置-->> https://blog.csdn.net/onceing/article/details/51554399(别人博客园的内容) 另外下面是N ...
- Kubernetes图形化归纳总结基础介绍整理
今天了解了下k8s,看了很多资料,自己归纳总结下,如果需要测试集群的话需要准备三台Linux服务器,一台做Master,其余两台作为Node仆从(MINION)节点, 先说下Node节点,就是宿主机器 ...