首页 > 其他分享 >CodeForces - 1353D Constructing the Array

CodeForces - 1353D Constructing the Array

时间:2024-08-24 13:49:00浏览次数:4  
标签:aa Node Constructing bb int CodeForces mid val Array

CodeForces - 1353D

这道题也可能比较简单,主要是要想到优先队列要怎么使用,这一点如果用递归会写不了

但是因为对优先队列不太熟悉,只有被提示可以用优先队列才想到要怎么用,

还是很重要的STL

注意运算符的重构应该反着来写

其他的思维很朴素,运算符的重构就是,先比较长度,优先用长度长的,如果一样就是选择左边界小的,用结构体封装数据即可

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
int a[200005]={0};
int cnt=0;
struct Node{
    int l;int r;int val;
};
bool operator<(Node a,Node b){
    if(a.val==b.val) return a.l>b.l;
    return a.val<b.val;
}
priority_queue<Node> q;
void solve(){
    while(!q.empty()){
        Node x=q.top();
        q.pop();
        if(x.val==1){
            a[x.l]=++cnt;
            continue;
        }
        int mid=(x.l+x.r)>>1;
        a[mid]=++cnt;
        Node aa;
        aa.l=x.l;
        aa.r=mid-1;
        aa.val=aa.r-aa.l+1;
        if(aa.val>0) q.push(aa); 
        Node bb;
        bb.l=mid+1;
        bb.r=x.r;
        bb.val=bb.r-bb.l+1;
        if(bb.val>0) q.push(bb);
    }
}
signed main(){
    int time;
    cin>>time;
    while(time--){
        int n;
        cnt=0;
        cin>>n;
        Node u;
        u.l=1;u.r=n;u.val=n;
        q.push(u);
        solve();
        for(int i=1;i<=n;++i){
            cout<<a[i]<<" ";
        }
        cout<<endl;
    }
}

标签:aa,Node,Constructing,bb,int,CodeForces,mid,val,Array
From: https://www.cnblogs.com/z-zhi/p/18377688

相关文章

  • CodeForces-431C k-Tree
    感觉这个题的dp还是有点思维的,可能就是我现在能做到的题目的天花板级别的了,dp还是要点灵感感觉,以下是代码,可能要写题解要过好久,先水着include<bits/stdc++.h>defineintlonglongdefineendl'\n'usingnamespacestd;constintmod=1000000007;intn,k,d;intdp[200][2]=......
  • CodeForces - 1336A Linova and Kingdom
    CodeForces-1336A就差一点点,很可惜,少发现个很显而易见的结论就是一个点的价值,实际上就是(这个点的深度-之后的点的数目)就是\(depth_i-size_i\)然后只要用dfs维护就好了然后把一个点的价值用STL优先队列放在一起,贪心完成。但是可能也算不上什么贪心,因为是很朴素的东西......
  • Codeforces Round 967 (Div. 2)
    A.MakeAllEqual签到题,先确定最终答案,然后把其他数删去,转化为统计众数点击查看代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#defineullunsignedlonglongintread(){intx=0;boolf=false;charc=getchar();while(c<......
  • Codeforces Round 967(Div.2)之赛后总结
    CodeforcesRound967(Div.2)传送锚点A.MakeAllEqual1.题面分析废话这么多,说白了就是求总数减去最多出现数的个数的值。2.解法直接用桶装一下,然后扫一遍维护最大值。3.code#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintN=1e6+520;......
  • ArrayList动态扩容机制(长度可变原理)
    ArrayList底层是数组结构的,数组的默认长度为10。当数组添加满了后,会自动扩容为1.5倍。原理讲解:1.用空参构造函数创建ArrayList集合容器。测试代码:publicclassArrayListDemo{publicstaticvoidmain(String[]args){//创建ArrayList集合容器......
  • 关于Arrays.asList返回的List无法新增和删除?
    这个是在写项目的时候发现的,然后就分析了一下源码,得其内部原理复现代码示例:publicclassArraysAsList{publicstaticvoidmain(String[]args){Integer[]array={1,2,3,4,5};List<Integer>list=Arrays.asList(array);list.forEach......
  • Codeforces Round 967 (Div. 2) ABCD
    来源:CodeforcesRound967(Div.2)做题时间:2024_08_21A.MakeAllEqual使所有元素相等的最小操作次数,就是保留最大的数字所以操作次数就是总数减去数量最多得数B.GeneratePermutation题意构造一个序列\(p\),内部元素是\([1,2,\cdots,n]\)打乱使长度为\(n\)的初始......
  • 深入理解 Java 中 ArrayList 的底层原理
    在这篇博客中,我们将深入探讨ArrayList的底层实现原理,并通过逐步剖析ArrayList的源码来理解其内部工作机制。我们将重点关注ArrayList的创建、元素添加、扩容机制等关键点。创建ArrayList集合对象ArrayList<String>list=newArrayList<>();使用空参构造器创建ArrayList集合......
  • 040 Dynamic Classes Array Syntax
    示例index.html:class="['demo',{active:boxBSelected}]"<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device......
  • Solution - Codeforces 1970G3 Min-Fund Prison (Hard)
    时间\(\mathcal{O}(\frac{n\sqrt{n}\logn}{\omega})\)空间\(\mathcal{O}(\frac{n\logn}{w})\)的爆标做法。首先无解当且仅当图联通且无割边。首先考虑加边的贡献。一个比较直观的感受就是只会尽可能少的加边,即加边到整个图连通。证明考虑删掉的边。如果加多了边导致删......