POJ 2828 线段树 逆序插入
2016-09-28 13:46
435 查看
思路:
1.线段树 逆着插入就OK了
2.块状链表 (可是我并不会写)
//By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int n,xx,tree[1000050],cnt[1000050]; struct Node{int num,wei;}node[1000050]; void build(int l,int r,int pos,int id){ if(l==r){tree[pos]=1;if(id)printf("%d ",cnt[pos]);return;} int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1; build(l,mid,lson,id),build(mid+1,r,rson,id); tree[pos]=tree[lson]+tree[rson]; } void insert(int l,int r,int pos){ if(l==r){tree[pos]=0,cnt[pos]=node[xx].wei;return;} int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1; if(tree[lson]<=node[xx].num)node[xx].num-=tree[lson],insert(mid+1,r,rson); else insert(l,mid,lson); tree[pos]=tree[lson]+tree[rson]; } int main(){ while(~scanf("%d",&n)){ for(int i=1;i<=n;i++) scanf("%d%d",&node[i].num,&node[i].wei); build(1,n,1,0); for(xx=n;xx;xx--)insert(1,n,1); build(1,n,1,1),putchar('\n'); } }
相关文章推荐
- POJ 2828 线段树 逆序插入
- poj 2828 线段树(单点更新,逆序插入)
- poj_2828线段树,逆序插入
- poj2828 经典线段树应用 逆序插入
- poj 2828 Buy Tickets(线段树,逆序插入)
- poj_2828线段树,逆序插入
- poj_2828线段树,逆序插入
- poj 2828 Buy Tickets 【线段树】【逆序插入 + 单点更新 + 区间求和】
- POJ 2828 逆序插入加线段树
- POJ 2828 Buy Tickets (线段树,逆序遍历)
- poj 2828 buy Tickets 用线段树模拟带插入的队列
- POJ 2828 Buy Tickets (想法题&后序插入&线段树下的二分查找)
- poj 2828 buy Tickets 用线段树模拟带插入的队列 单点更新
- POJ 2828 Buy Tickets(多校连萌,线段树模拟插入)
- POJ 2828(线段树,思维,逆序数变形题)
- POJ2828 Buy Tickets 【线段树】+【单点更新】+【逆序】
- POJ 2828 Buy Tickets【线段树单点更新+逆序遍历】【经典题】【模板题】
- POJ 2828——Buy Tickets(树状数组,线段树——逆序遍历)
- poj 2828 Buy Tickets (线段树(排队插入后输出序列))
- (中等) POJ 2828 Buy Tickets , 逆序+线段树。