题意 : 给出一颗无限层的满二叉树,然后每个值为 X (根的 X 等于 1 ) 左孩子的值是 2*X,右孩子的值是 2*X+1 ,现在有两种操作,(1, x,k) 表示将 x 所在层的所有节点整体向右循环地移动 k 个单位、(2,x,k)表示将 x 所在的层的所有节点及其子树向右循环地移动 k 个单位、(3,x)输出从 x 到根的路径

分析 :

第一个操作不难进行模拟

只要给每个层记录其偏移量,最后查询的时候依据偏移量来输出具体的值即可

关键是第二个操作

仔细一想,会发现一个规律

如果第一层移动 k 个单位

那么对于第二种操作,其孩子分别移动了 k*2^1、k*2^2、k*2^3……

所以其本质就是进行第一种操作,偏移量不一样了而已

查看了题目数据量之后发现每一次只进行到第 60 层

所以模拟到第 60 层就是回答所有问询了

#include<bits/stdc++.h>
#define LL long long
using namespace std;
;
LL Move1[maxn];///正移动偏移量,方便知道原节点去了哪个位置
LL Move2[maxn];///反移动偏移量,方便知道原节点现在是什么值

inline void op1(int Lay, LL move, LL x, LL times)
{
    ) Lay = log2(x) + ;///获取 x 在第几层
    LL Base = 1LL<<(Lay-);///这一层有多少个节点

    ) move %= Base;///如果非第二种操作
    else move = ( (move % Base) * (times % Base) ) % Base;///第二种操作

    Move1[Lay] = (( Move1[Lay] + move) + Base ) % Base;///正偏移量直接移动即可
    Move2[Lay] = (( Move2[Lay] - move) + Base ) % Base;///反偏移量要反向移动
}

inline void op2(LL move, LL x)
{
    ;
    ; i<; i++,j++)///最多到60层
        op1(i, move, , 1LL<<j);
}

inline void op3(LL x)
{
    if(x == 1LL){
        puts(");
        return;
    }
    printf("%I64d", x);
    ;
    LL Base = 1LL<<(Lay-);
    LL pos = (( (x - Base) + Move1[Lay] ) + Base) % Base + Base;
    while(!(pos == 3LL || pos == 2LL)){

        ) pos = (pos - )>>;///找到当前节点的父亲节点
        ;

        Lay = log2(pos) + ;
        Base = 1LL<<(Lay-);

        printf(" %I64d", ( (pos - Base + Move2[Lay]) + Base ) % Base + Base);///通过反向偏移量来获取在这个节点位置的值
    }puts(");
}

int main(void)
{
    int Q;
    scanf("%d", &Q);
    while(Q--){
        int command;
        LL X, K;
        scanf("%d", &command);
        ){
            scanf("%I64d %I64d", &X, &K);
            op1(-, K, X, -);
        }){
            scanf("%I64d %I64d", &X, &K);
            op2(K, X);
        }else{
            scanf("%I64d", &X);
            op3(X);
        }
    }
    ;
}

Codeforces 960D Full Binary Tree Queries ( 思维 && 模拟 )的更多相关文章

  1. Codeforces 960D - Full Binary Tree Queries

    960D - Full Binary Tree Queries 思路: 用move1[i]记录第i层第1种操作移动的个数(对这一层的个数取模) 用move2[i]记录第i层第2种操作移动的个数(对这一 ...

  2. hdu 6161--Big binary tree(思维--压缩空间)

    题目链接 Problem Description You are given a complete binary tree with n nodes. The root node is numbere ...

  3. Codeforces 758C:Unfair Poll(思维+模拟)

    http://codeforces.com/problemset/problem/758/C 题意:教室里有n列m排,老师上课点名从第一列第一排开始往后点,直到点到第一列第m排,就从第二列第一排开始点 ...

  4. codeforces C. Vasya And The Mushrooms (思维+模拟)

    题意:给定一个2*n的矩形方格,每个格子有一个权值,从(0,0)开始出发,要求遍历完整个网格(不能重复走一个格子),求最大权值和,(权值和是按照step*w累加,step步数从0开始). 转载: 题解 ...

  5. codeforce 1311E. Construct the Binary Tree (构造,就是个模拟)

    ACM思维题训练集合 You are given two integers n and d. You need to construct a rooted binary tree consisting ...

  6. Binary Tree(二叉树+思维)

    Binary Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Tota ...

  7. Codeforces 250 E. The Child and Binary Tree [多项式开根 生成函数]

    CF Round250 E. The Child and Binary Tree 题意:n种权值集合C, 求点权值和为1...m的二叉树的个数, 形态不同的二叉树不同. 也就是说:不带标号,孩子有序 ...

  8. Binary Tree HDU - 5573 (思维)

    题目链接: B - Binary Tree  HDU - 5573 题目大意: 给定一颗二叉树,根结点权值为1,左孩子权值是父节点的两倍,右孩子是两倍+1: 给定 n 和 k,让你找一条从根结点走到第 ...

  9. 九章算法系列(#3 Binary Tree & Divide Conquer)-课堂笔记

    前言 第一天的算法都还没有缓过来,直接就进入了第二天的算法学习.前一天一直在整理Binary Search的笔记,也没有提前预习一下,好在Binary Tree算是自己最熟的地方了吧(LeetCode ...

随机推荐

  1. 2019JAVA第六次实验报告

    Java实验报告 班级 计科二班 学号 20188442 姓名 吴怡君 完成时间 2019.10.18 评分等级 实验四 类的继承 实验目的 理解异常的基本概念: 掌握异常处理方法及熟悉常见异常的捕获 ...

  2. etcd集群移除节点

    查看当前集群信息 # etcdctl member list --write-out=table +------------------+---------+--------------------+ ...

  3. [转帖]2018年全球ERP软件行业市场规模与发展趋势分析 云ERP将兴起【组图】

    2018年全球ERP软件行业市场规模与发展趋势分析 云ERP将兴起[组图] https://www.qianzhan.com/analyst/detail/220/190215-4b1d6868.ht ...

  4. Win10 开启 热点的简单办法

  5. 【转帖】AMD:未向合资企业THATIC发放后续芯片设计授权

    AMD:未向合资企业THATIC发放后续芯片设计授权 https://www.cnbeta.com/articles/tech/854193.htm 海光和兆芯的CPU 都不靠谱啊. 在台北电脑展(C ...

  6. 洛谷P1029 最大公约数和最小公倍数问题 (简单数学题)

    一直懒的写博客,直到感觉不写不总结没有半点进步,最后快乐(逼着)自己来记录蒟蒻被学弟学妹打压这一年吧... 题目描述 输入22个正整数x_0,y_0(2 \le x_0<100000,2 \le ...

  7. [LeetCode] 228. 汇总区间

    题目链接: https://leetcode-cn.com/problems/summary-ranges 难度:中等 通过率:48.9% 题目描述: 给定一个无重复元素的有序整数数组,返回数组区间范 ...

  8. 2018-2019 ICPC, NEERC, Southern Subregional Contest (codeforces 1070)

    A. 直接从状态(0,0)bfs, 这样一定是最小的 #include <iostream> #include <sstream> #include <algorithm ...

  9. springmvc中的视图模型的返回方式

    way1:略过; way2:(神似way1)通过在方法的参数中添加一个Model类型的参数,,该参数由spring自动生成传入, 然后在方法内部使用addAttribute()方式添加模型数据, 最后 ...

  10. atxserver2-rethinkdb的一些基础操作

    因为我只需要一些基础操作就好,所以在web端的 Data Explorer 操作,首先启动  rethinkdb.exe,然后登陆网页端, 下面是一些基础操作的语句, 一.创建表r.db(‘atxse ...