首页 > 其他分享 >P4145 上帝造题的七分钟 2 / 花神游历各国

P4145 上帝造题的七分钟 2 / 花神游历各国

时间:2024-04-17 12:22:58浏览次数:32  
标签:fa int update 修改 100005 七分钟 P4145 造题 now

原题链接

题解

1.由于每个点最多修改6次,所以我们可以暴力循环遍历所有点进行修改。然后可以把无需再修改的点跳过,即并查集,指向右端第一个仍然需要修改的值的下标
这样就是单点修改加区间查询,树状数组
时间复杂度 \(6·n·log(n)\)(单点修改)+ \(m·2·log(n)\) (区间查询)

code

#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) ((x)&(-x))

int a[100005];
int fa[100005];
int tree[100005]={0};
int n;

int finds(int now){return now==fa[now]?now:fa[now]=finds(fa[now]);}

void update(int x,int val)
{
    while(x<=n)
    {
        tree[x]+=val;
        x+=lowbit(x);
    }
}

int query(int x)
{
    int sum=0;
    while(x)
    {
        sum+=tree[x];
        x-=lowbit(x);
    }
    return sum;
}

int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        update(i,a[i]);
        fa[i]=i;
    }
    int m;
    cin>>m;
    while(m--)
    {
        int k,l,r;
        cin>>k>>l>>r;
        if(l>r) swap(l,r);
        if(k==0)
        {
            for(int i=l;i<=r&&i>=l;i=finds(i+1))
            {
                //printf("i:%d\n",i);
                int d=sqrt(a[i]);
                update(i,d-a[i]);
                a[i]=d;
                if(a[i]<=1) fa[i]=i+1;
            }
        }
        else
        {
            cout<<query(r)-query(l-1)<<endl;
        }
    }
    return 0;
}

标签:fa,int,update,修改,100005,七分钟,P4145,造题,now
From: https://www.cnblogs.com/pure4knowledge/p/18140288

相关文章

  • P4145 上帝造题的七分钟 2 / 花神游历各国 题解
    题目链接:上帝造题的七分钟2/花神游历各国差不多的题:[YnoiEasyRound2023]TEST_69注意到对某个点来说暴力单点即为反复的:\(x=\sqrt{x}\),最终为\(1\),根据\(master\)主定理可知,跟\(veb\)树分析差不多的,复杂度为:\(O(\log{\log{V_{max}}})\)。不懂的可以去学学这篇文章。那......
  • 集训队论文浅读 - 信息学竞赛中构造题的常用解题方法
    抽屉原理把\(n\)个物品放入\(k\)个抽屉中,其中至少有一个抽屉中有\(\lceil\dfrac{n}{k}\rceil\)个物品,并一定有一个抽屉包含\(\lfloor\dfrac{n}{k}\rfloor\)个物品。构造题中考虑构造不同情况的抽屉,应对构造权值类问题。对于取整符号要敏感。Codeforces1450C2构......
  • 20231101构造题记录
    20231101构造题记录A.人生的经验可以对于每个长度为\(l-1\)的串建一个点,每个点有\(c\)个后继状态,也有\(c\)个入边,所以一定可以找到一个欧拉路因此答案为\(c^l+l-1\)即所有可能的串首尾相接拼起来的长度考虑用一个圈套圈求欧拉路,即每次拓展一个点,用栈维护,如果不能继......
  • 造题记录:如何出强制在线题
    今天造了一个数据结构题,具体题面是什么就不说了,题目名称是sosomst。输入格式是,第一行\(n,typ\),接下来两行的点权,然后是一棵树。输出\(n-1\)行的数字,树边强制在线。以下是我生成这题数据的方法。std.cpp肯定是自己写了,但是先不要实现强制在线。将std.cpp编译为可执行文件......
  • CF882E1+CF1882E2 Two Permutations 题解-构造题
    CF882E1+CF1882E2TwoPermutations题解-构造题哇,人类智慧,太智慧了。。。此题作为20231010联考的T3。感觉赛时根本没有去往这方面想。CF1882E1CF1882E2E1是简单版,就是没有要求操作数最小化。E1-EasyVersion方法1首先考虑没有次数限制的,对于单独的每一个串的情况。......
  • 【做题笔记】CF 1400-1600 构造题
    本人比较菜,所以做的rating很低/kk/kk/kk欢迎各位大佬嘲讽这个蒟蒻/kk/kk/kk/kk$*$表示看了题解才过的(所以你会发现这里的大部分题后面都会有$*$)实时通过率直接贴在后面当不看题解通过率稳定在\(50\%\)以上就弃坑。希望早日弃坑ABBCorBACB*题面中给了两种操作......
  • 【笔记】构造题
    听说多做构造题长脑子,至少能让我从机械性的考试里清醒一点吧递归子问题剔除问题边缘例题......
  • P4145 上帝造题的七分钟 2 / 花神游历各国 势能
    P4145上帝造题的七分钟2/花神游历各国这道题解法很多,但我主要想提一下势能这个概念。就像重力势能一样,一个物体只会往下落,且到达零势面之后不会再继续往下落(虽然和真实情况有出入)因此,我们往往可以利用这个特性,来减少许多不必要的操作;对于这道题而言,我们发现一个数如果已......
  • 有趣的构造题
    前言:这篇题单里放了一些个人认为很有用/新奇的构造题,这些是我第一次见比较难想出来题,建议想不出来先看下思路。CF1198C题意给一个无向简单图,\(3\timesn\)个点,\(m\)条边,请找大小为\(n\)的点独立集或边独立集。输出点独立集、边独立集均可,或输出无解。输出方案的同时需输出......
  • [P4145 上帝造题的七分钟 2 / 花神游历各国]题解
    P4145上帝造题的七分钟2/花神游历各国题目描述分析一开始在思考有没有一个数学公式来处理每一个开方的操作但发现数据的\(\le10^{12}\)那么最多开六次就变成1了(突破口)这样每一个数的有用操作只有6次其他就全部是1很显然,我们可以去记录每一段是否全为1再用线段树、分......