当前位置: 首页 > news >正文

企业网站建设与优化/百度指数排行榜哪里看

企业网站建设与优化,百度指数排行榜哪里看,菲律宾做网站,推广公众号Lost Cows 题目传送门 题意 FJ有n头牛,编号 1~n ,但是这些牛并没有按照编号排队,但是 FJ 知道每头牛前面有几头编号比这头牛编号小,现在问你每头牛的编号。 题解 从最后一头牛开始,其它牛都已经在队列里,…

Lost Cows

题目传送门

  • 题意
    FJ有n头牛,编号 1~n ,但是这些牛并没有按照编号排队,但是 FJ 知道每头牛前面有几头编号比这头牛编号小,现在问你每头牛的编号。

  • 题解
    从最后一头牛开始,其它牛都已经在队列里,假如这头牛前面有 x 头牛编号比它小,那么这头牛就是编号第 x 小(按编号从小到大排序)的牛的编号加一。知道了这头牛的编号,就可以把这头牛从队列中赶走了,因为有没有它都不会影响到前边的牛。这样,第 n-1 头牛就成了最后一头牛,再重复上面的过程就可以了。

    至于解法,可以用暴力解法,每次数 x+1 次,但是复杂度很高,稍有不慎就会超时,但是思路是正确的,只需要降低算法的复杂度就可以了,因为是找第 x+1 头牛的编号,相当于求前缀和,很容易想到的就是树状数组和线段树。相比线段树,树状数组的代码更简洁,因为只涉及区间求和,所以推荐使用树状数组。

    还有,树状数组在求区间和的时候使用二分法可以进一步优化。

  • AC代码

    树状数组

    #include<iostream>
    #include<cstdio>
    using namespace std;
    #define lowbit(x) ((x) & (-x))
    const int MAX = 10000;
    int tree[MAX], pre[MAX], ans[MAX];
    int n;
    void add(int x, int d){while(x<=n){tree[x] += d;x += lowbit(x);}
    }
    int sum(int x){int sum = 0;while(x>0){sum += tree[x];x -= lowbit(x);}return sum;
    }
    int findpos(int x){int l=1, r=n;while(l<r){int mid = (l+r)>>1;if(sum(mid)<x) l = mid+1;else r = mid;}return l;
    }
    int main(){scanf("%d", &n);pre[1] = 0;for(int i=2; i<=n; i++) scanf("%d", &pre[i]);for(int i=1; i<=n; i++) tree[i] = lowbit(i);for(int i=n; i>0; i--){ans[i] = findpos(pre[i]+1);add(ans[i], -1);}for(int i=1; i<=n; i++) printf("%d\n", ans[i]);return 0;
    }
    


    线段树

    #include<iostream>
    #include<stdio.h>
    #include<cmath>
    using namespace std;const int MAX = 10000;
    int pre[MAX], tree[4*MAX], ans[MAX];void BuildTree(int n, int last_left){int i;for(i=last_left; i<last_left+n; i++){tree[i] = 1;}while(last_left != 1){for(i=last_left/2; i<last_left; i++){tree[i] = tree[2*i] + tree[2*i+1];}last_left = last_left/2;}
    }int query(int u, int num, int last_left){tree[u]--;if(tree[u]==0 && u>=last_left){return u;}if(tree[u<<1]<num) return query((u<<1)+1, num-tree[u<<1], last_left);else return query(u<<1, num, last_left);
    }int main(){int n, last_left, i;scanf("%d", &n);pre[1] = 0;last_left = 1<<(int(log(n)/log(2))+1);for(i=2; i<=n; i++) scanf("%d", &pre[i]);BuildTree(n, last_left);for(i=n; i>=1; i--) ans[i] = query(1, pre[i]+1, last_left) - last_left + 1;for(i=1; i<=n; i++) printf("%d\n", ans[i]);return 0;
    }
http://www.lbrq.cn/news/51877.html

相关文章:

  • 建设银行网站怎么查工资明细/网络营销策划的流程
  • 专业深圳网站建设公司/网络优化工资一般多少
  • 响应式视频网站模板/近期热点新闻事件50个
  • wordpress社交登录/做seo如何赚钱
  • 石家庄货运做网站公司/行业关键词查询
  • 网站建设服务费用/短视频代运营方案策划书
  • 做网站要幕布干啥呢/淘宝关键词怎么选取
  • 字体分辨网站/上海培训机构排名榜
  • 上海有名的网站建设公司有哪些/品牌营销包括哪些内容
  • web前端和网站开发的区别/百度seo网站优化
  • 云手机/seo关键词排名优化费用
  • 深圳 做网站 车公庙/手机优化软件哪个好用
  • 关于旅游网站策划书/泰州网站排名seo
  • 在哪做网站建设/网站推广外贸
  • 北京制作手机网站/宁德市蕉城区
  • 网站建设主题有哪些注意事项/重庆seo整站优化
  • 传奇高端网站设计制作/免费引流推广怎么做
  • 怎么用eclipse做网站开发/百度站长中心
  • 桂林住房城乡建设厅网站/飞猪关键词排名优化
  • 湖南竞网做网站好吗/app推广在哪里可以接单
  • 衡水网站建设浩森宇特/外国黄冈网站推广平台
  • wordpress 站内搜索 慢/百度网站链接
  • 工作室起名大全/关键词排名优化是什么意思
  • 网站建设客户去哪里找/百度友情链接
  • 网站建设基础包括/新榜数据平台
  • 河北网站制作 网站开发/廊坊seo排名霸屏
  • 做网站网络公司/惠州企业网站seo
  • 重庆移动网站制作/网络营销师证书查询
  • wordpress建站发文教程/建立网站有哪些步骤
  • 有关风水的网站建设栏目/网站关键词收录查询
  • Linux 进程间通信
  • 单片机(STM32-中断)
  • Hadoop(二)
  • 应用部署作业-02-流程
  • python+selenium UI自动化初探
  • 高温车间(60℃+)如何选高温/宽温边缘网关设备?