博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hiho1079 线段树区间改动离散化
阅读量:5071 次
发布时间:2019-06-12

本文共 1403 字,大约阅读时间需要 4 分钟。

题目链接:

代码:

#include
#include
#include
#include
#include
#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define maxn 100050using namespace std;int cnt[maxn<<1];int v[maxn<<2];int vis[maxn<<2]={0};int modify[maxn][2];int ans=0;void travel(int l,int r,int rt){ if(v[rt]) { if(!vis[v[rt]]) vis[v[rt]]=1,ans++; return; } if(l==r) return; int m=(l+r)>>1; travel(lson); travel(rson);}void update(int L,int R,int w,int l,int r,int rt){ if(L<=l&&R>=r) { v[rt]=w; return; } if(v[rt]) { v[rt<<1|1]=v[rt<<1]=v[rt]; v[rt]=0; } int m=(l+r)>>1; if(L<=m) update(L,R,w,lson); if(R>m) update(L,R,w,rson);}int main(){// freopen("in.txt","r",stdin); int d,n,a,b,s=0; scanf("%d%d",&d,&n); for(int i=1; i<=d; i++) { scanf("%d%d",&modify[i][0],&modify[i][1]); cnt[s++]=modify[i][0]; cnt[s++]=modify[i][1]; } sort(cnt,cnt+s); s=unique(cnt,cnt+s)-cnt; for(int i=1; i<=d; i++) { a=lower_bound(cnt,cnt+s,modify[i][0])-cnt+1; // x~x+1 才代表线段树中的一个点 b=lower_bound(cnt,cnt+s,modify[i][1])-cnt; update(a,b,i,1,s,1); } travel(1,s,1); printf("%d\n",ans); return 0;}

转载于:https://www.cnblogs.com/liguangsunls/p/7251778.html

你可能感兴趣的文章
一步步教你学会browserify
查看>>
Jmeter入门实例
查看>>
亲近用户—回归本质
查看>>
中文脏话识别的解决方案
查看>>
CSS之不常用但重要的样式总结
查看>>
Python编译错误总结
查看>>
URL编码与解码
查看>>
日常开发时遇到的一些坑(三)
查看>>
Eclipse 安装SVN插件
查看>>
深度学习
查看>>
TCP粘包问题及解决方案
查看>>
构建之法阅读笔记02
查看>>
添加按钮
查看>>
移动端页面开发适配 rem布局原理
查看>>
Ajax中文乱码问题解决方法(服务器端用servlet)
查看>>
会计电算化常考题目一
查看>>
阿里云服务器CentOS6.9安装Mysql
查看>>
剑指offer系列6:数值的整数次方
查看>>
js 过滤敏感词
查看>>
poj2752 Seek the Name, Seek the Fame
查看>>