博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU - 5775-Bubble Sort(权值线段树)
阅读量:5011 次
发布时间:2019-06-12

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

P is a permutation of the integers from 1 to N(index starting from 1). 
Here is the code of Bubble Sort in C++. 
for(int i=1;i<=N;++i)     for(int j=N,t;j>i;—j)         if(P[j-1] > P[j])             t=P[j],P[j]=P[j-1],P[j-1]=t;
After the sort, the array is in increasing order. ?? wants to know the absolute values of difference of rightmost place and leftmost place for every number it reached.

InputThe first line of the input gives the number of test cases T; T test cases follow. 

Each consists of one line with one integer N, followed by another line with a permutation of the integers from 1 to N, inclusive. 
limits 
T <= 20 
1 <= N <= 100000 
N is larger than 10000 in only one case. 
OutputFor each test case output “Case #x: y1 y2 … yN” (without quotes), where x is the test case number (starting from 1), and yi is the difference of rightmost place and leftmost place of number i.Sample Input

233 1 231 2 3

Sample Output

Case #1: 1 1 2Case #2: 0 0 0

Hint

In first case, (3, 1, 2) -> (3, 1, 2) -> (1, 3, 2) -> (1, 2, 3)the leftmost place and rightmost place of 1 is 1 and 2, 2 is 2 and 3, 3 is 1 and 3In second case, the array has already in increasing order. So the answer of every number is 0. 思路:找一下左右的端点 左边取当前位置和最后的位置中最小的 右端点右侧等于比他小的数+当前位置 代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
const int maxn=1e5+5;typedef long long ll;using namespace std;struct node{ int l,r; int num;}tree[maxn<<2];struct node1 { int pos,val; bool friend operator<(node1 x,node1 y) { return x.val
>1; build(m<<1,l,mid); build(m<<1|1,mid+1,r); pushup(m);}void update(int m,int pos,int val){ if(tree[m].l==tree[m].r) { tree[m].num=val; return; } int mid=(tree[m].l+tree[m].r)>>1; if(pos<=mid) { update(m<<1,pos,val); } else { update(m<<1|1,pos,val); } pushup(m);}int query(int m,int l,int r){ if(tree[m].l==l&&tree[m].r==r) { return tree[m].num; } int mid=(tree[m].l+tree[m].r)>>1; if(r<=mid) { return query(m<<1,l,r); } else if(l>mid) { return query(m<<1|1,l,r); } else { return query(m<<1,l,mid)+query(m<<1|1,mid+1,r); } }int ans[maxn];int main(){ int T; cin>>T; int cnt=1; while(T--) { int n; scanf("%d",&n); build(1,0,n); for(int t=1;t<=n;t++) { scanf("%d",&p[t].val); p[t].pos=t; update(1,p[t].val,1); } //sort(p+1,p+n+1); for(int t=1;t<=n;t++) { ans[p[t].val]=abs(min(p[t].val,p[t].pos)-(t+query(1,0,p[t].val-1))); update(1,p[t].val,0); } printf("Case #%d: ",cnt++); for(int t=1;t<=n;t++) { if(t==n) { printf("%d\n",ans[t]); } else { printf("%d ",ans[t]); } } } return 0;}

 

转载于:https://www.cnblogs.com/Staceyacm/p/11323907.html

你可能感兴趣的文章
guid
查看>>
Python中出现“TabError: inconsistent use of tabs and spaces in indentation”问题的解决
查看>>
ajax请求
查看>>
js学习总结----DOM增删改和应用
查看>>
希尔伯特矩阵(Hilbert matrix)
查看>>
(20)sopel算法
查看>>
学习总结 javascript 闭包
查看>>
实验吧一个小坑注入
查看>>
【 D3.js 高级系列 — 8.0 】 打标
查看>>
Mac必备软件推荐
查看>>
Android Gson深入分析
查看>>
display:flow-root
查看>>
判读字符串是否为空的全局宏-分享
查看>>
iOS中Block的基础用法
查看>>
mac 终端 使用ftp命令
查看>>
22-reverseString-Leetcode
查看>>
Centos 开机自动联网
查看>>
cocos2dx使用lua和protobuf
查看>>
HDOJ 5630 Rikka with Chess
查看>>
netcore2.1 在后台运行一个任务
查看>>