poj 2828 Buy Tickets【线段树 单点更新】
2015-08-04 22:55
393 查看
倒着插,先不理解意思,后来看一篇题解说模拟一下
手动模拟一下就好理解了-----
不过话说一直写挫---一直改啊-----
好心塞------
View Code
加油啊~~~~
手动模拟一下就好理解了-----
不过话说一直写挫---一直改啊-----
好心塞------
#include <cstdio> #include <ctime> #include <cstring> #include <cstdlib> #include <cmath> #include <vector> #include <map> #include <set> #include <stack> #include <queue> #include <string> #include <iostream> #include <algorithm> using namespace std; #define getmid(l,r) ((l) + ((r) - (l)) / 2) typedef long long LL; const double eps = 1e-8; const int INF = (1 << 30) - 1; const int maxn = 200005; struct node{ int l,r,s; }t[4*maxn]; struct Edge{ int pos,val; }a[maxn]; int n; int ans[maxn]; void Push_up(int p){ t[p].s = t[p<<1].s + t[p<<1|1].s; } void Build_tree(int p,int l,int r){ t[p].l = l; t[p].r = r; if(l == r){ t[p].s = 1; return; } int mid = getmid(l,r); Build_tree(p<<1,l,mid); Build_tree(p<<1|1,mid+1,r); Push_up(p); } void update(int idx,int p){ if(t[p].l == t[p].r){ t[p].s--; return; } int mid = getmid(t[p].l,t[p].r); if(idx <= mid) update(idx,p<<1); else update(idx,p<<1|1); Push_up(p); } int query(int idx,int p){ if(t[p].l == t[p].r) return t[p].l; if(t[p<<1].s >= idx) return query(idx,p<<1); else return query(idx-t[p<<1].s,p<<1|1); } void solve(){ Build_tree(1,1,n); // for(int i = 1;i <= 2*n;i++) // printf("t[%d].l = %d t[%d].r = %d t[%d].s = %d\n",i,t[i].l,i,t[i].r,i,t[i].s); for(int i = n;i >= 1;i--){ int pos = a[i].pos; int id = query(pos,1); ans[id] = a[i].val; update(id,1); } printf("%d",ans[1]); for(int i = 2;i <= n;i++) printf(" %d",ans[i]); printf("\n"); } int main(){ while(scanf("%d",&n) != EOF){ for(int i = 1;i <= n;i++){ scanf("%d %d",&a[i].pos,&a[i].val); a[i].pos++; } solve(); } return 0; }
View Code
加油啊~~~~
相关文章推荐
- scala中的注解
- 解决在使用request得到属性的空指针问题
- date命令使用
- Python开发--linecache
- Spring与Memcached-xmemcached整合
- iOS开发中NSDictionary操作大全
- jquery的几种ajax方式
- 在JSP页面只获取时分秒的问题
- Office使用技巧
- nodejs 基于socket.io实现聊天室
- 技术学习规划
- Lotto(dfs)
- php-spider代码使用
- GIS平台发展方向
- OpenGL入门简介
- 【LeetCode】189 - Rotate Array
- python开发--pickle
- STL库的容器简要总结
- android新版本下获取屏幕宽度和高度的方法
- 2015080404 - 公司的规章制度