http://acm.nbut.cn:8081/Problem/view.xhtml?id=1317&&线段树单点查询
来源:互联网 发布:国家顶级域名是什么 编辑:程序博客网 时间:2024/06/06 14:06
题意:给你一个插入的序列,然后输出最后的序列,如果用一般方法查询为o(n),而用线段树查询可以优化到log(n)。。。。
AC代码:
#include <iostream>#include<string.h>#include<algorithm>#include<cstdio>#define CLR(arr,val) memset(arr,val,sizeof(arr))#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1#define N 200005using namespace std;typedef struct { int l; int r; int sum;}Node;Node node[N<<2];struct Point{ int x; int y;}s1[N];int s[N];void push_up(int rt){ node[rt].sum=node[rt<<1].sum+node[rt<<1|1].sum;}void build(int l,int r,int rt){ node[rt].l=l; node[rt].r=r; if(l==r){ node[rt].sum=1; return; } int mid=(l+r)>>1; build(lson); build(rson); push_up(rt);}void Quary(int l,int r,int rt,int val,int x){ if(node[rt].l==node[rt].r) { node[rt].sum=0; s[node[rt].l]=x; return; } int mid=(l+r)>>1; if(node[rt<<1].sum>=val) Quary(lson,val,x); else Quary(rson,val-node[rt<<1].sum,x); push_up(rt);}void in(int &a){ char ch; while((ch=getchar())<'0'||ch>'9'); for( a=0;ch>='0'&&ch<='9';ch=getchar()) a=a*10+ch-'0';}int main(){ int n; while(~scanf("%d",&n)) { CLR(s,-1); CLR(node,0); build(1,n,1); for(int i=0;i!=n;++i) in(s1[i].x),s1[i].x++,in(s1[i].y); for(int i=n-1;i>=0;--i) Quary(1,n,1,s1[i].x,s1[i].y); for(int i=1;i<n;++i) printf("%d ",s[i]); printf("%d\n",s[n]); }return 0;}
- http://acm.nbut.cn:8081/Problem/view.xhtml?id=1317&&线段树单点查询
- Anger Begins&&http://acm.nbut.cn:8081/Contest/view/id/29/problem/A.xhtml
- http://cdn.ac.nbutoj.com/Problem/view.xhtml?id=1001&&纸牌游戏
- http://cdn.ac.nbutoj.com/Problem/view.xhtml?id=1003&&矩阵链乘
- http://cdn.ac.nbutoj.com/Problem/view.xhtml?id=1187&&Hole Breaker
- http://cdn.ac.nbutoj.com/Problem/view.xhtml?id=1186
- http://cdn.ac.nbutoj.com/Problem/view.xhtml?id=1184&&Elaine's Queue
- http://cdn.ac.nbutoj.com/Problem/view.xhtml?id=1182&&Counter-Strike
- http://cdn.ac.nbutoj.com/Problem/view.xhtml?id=1181
- http://cdn.ac.nbutoj.com/Problem/view.xhtml?id=1180
- http://cdn.ac.nbutoj.com/Problem/view.xhtml?id=1198&& I can do it!
- http://acm.pku.edu.cn/JudgeOnline/problem?id=2528 成段更新,区间统计颜色的种类(离散化处理线段)
- http://acm.pku.cn/JudgeOnline/problem?id=1141两种AC方法
- http://acm.pku.edu.cn/JudgeOnline/problem?id=2407 很水的欧拉
- http://acm.pku.edu.cn/JudgeOnline/problem?id=2480 欧拉
- http://acm.pku.edu.cn/JudgeOnline/problem?id=2891 欧几里德线性同余方程
- http://acm.pku.edu.cn/JudgeOnline/problem?id=1808 二次剩余式
- http://acm.pku.edu.cn/JudgeOnline/problem?id=1284 (原根)
- Java 枚举7常见种用法
- struts,ognl,valuestack
- poj 1979 [ Basic DFS 填平代标记 ]
- Linux下安装RTX腾讯通
- function object研究之十一 addressof
- http://acm.nbut.cn:8081/Problem/view.xhtml?id=1317&&线段树单点查询
- C#中将图片以字符串形式存入文档中
- Android签名机制
- java 枚举学习--从小程序中学习
- 二维数组成绩处理,咋这么难叨叨
- 实习一个星期的感受
- 博客搬家
- poj-1016 C++标准库(string)的代码(优雅)体现的淋漓精致啊
- POJ1502 信息传递(单源最短路径)