首页 > 其他分享 >AtCoder Regular Contest 189 (Div. 2)

AtCoder Regular Contest 189 (Div. 2)

时间:2024-12-12 22:11:41浏览次数:9  
标签:AtCoder rs int sum stk Regular ls 189 define

A

计数

B

折叠差不变

D

观察性质暴力

#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define endl '\n'
#define LL long long
 
const int N = 5e5 + 10;
int n, a[N], l[N], r[N];
LL pre[N], suf[N], b[N];

void solve() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        b[i] = a[i];
        l[i] = i - 1; r[i] = i + 1;
        pre[i] = pre[i - 1] + a[i];
    }
    for (int i = n; i >= 1; i--) {
        suf[i] = suf[i + 1] + a[i];
    }
    while (1) {
        bool flag = 0;
        for (int i = 1; i <= n; i++) {
            while (l[i] >= 1 && b[i] > a[l[i]]) {
                b[i] += pre[l[i]] - pre[l[l[i]]];
                l[i] = l[l[i]];
                flag = 1;
            }
        }
        for (int i = n; i >= 1; i--) {
            while (r[i] <= n && b[i] > a[r[i]]) {
                b[i] += suf[r[i]] - suf[r[r[i]]];
                r[i] = r[r[i]];
                flag = 1;
            }
        }
        if (!flag) break;
    }
    for (int i = 1; i <= n; i++) {
        cout << b[i] << ' ';
    }
}
 
int main() {
    // ios::sync_with_stdio(false);
    // cin.tie(nullptr);
    // cin >> t;
    solve();
    return 0;
}

笛卡尔树(特殊)

#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define endl '\n'
#define LL long long
 
const int N = 5e5 + 10;
int n, a[N], ls[N], rs[N], k, stk[N];
LL ans[N], sum[N];
void dfs1(int x) {
    sum[x] = a[x];
    if (ls[x]) dfs1(ls[x]);
    if (rs[x]) dfs1(rs[x]);
    if (ls[x]) sum[x] += sum[ls[x]];
    if (rs[x]) sum[x] += sum[rs[x]];
}
void dfs(int x, int fa) {
    ans[x] = sum[x];
    if (fa && ans[x] > a[fa]) ans[x] = ans[fa];
    if (ls[x]) dfs(ls[x], x);
    if (rs[x]) dfs(rs[x], x);
}

void solve() {
    int top = 0;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        while(k > 0 && a[stk[k]] < a[i]) k--;
        if (k) rs[stk[k]] = i;
        if (k < top) ls[i] = stk[k + 1];
        stk[++k] = i;
        top = k;
    }
    dfs1(stk[1]);
    dfs(stk[1], 0);
    a[0] = a[n + 1] = 1e9 + 7;
    for (int i = 1; i <= n; i++) {
        if (a[i - 1] < a[i] || a[i] > a[i + 1]) cout << ans[i] << ' ';
        else cout << a[i] << ' ';
    }
}
 
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    // cin >> t;
    solve();
    return 0;
}

标签:AtCoder,rs,int,sum,stk,Regular,ls,189,define
From: https://www.cnblogs.com/lyrrr/p/18603537

相关文章

  • ARC189E Straight Path
    题面传送门首先\(n\leq3\)无解,\(n=5\)的时候通过暴力说明只能是\(4\),其余情况可以构造说明答案是\(3\)。首先我们归纳说明,对于一张\(n\)个点,每条边权值为\(1,2\)的完全图,一定存在一条哈密顿路径单调不降。对于\(n=1\)显然成立,假设\(n-1\)成立,现加入\(n\)号点。......
  • SSM职业高中排课系统的设计与实现18998(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景与意义随着现代教育体系的不断发展,职业高中的课程安排变得越来越复杂。传统的人工排课方式已难以满足职业高中的需求,因为它需要考虑到......
  • AtCoder Beginner Contest 383
    AtCoderBeginnerContest383//前三题都很水,只能写写这种题骗自己了A-Humidifier1​ 直接模拟#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineinfINT32_MAX#definePIIpair<int,int>#defineendl'\n'inlinevoidsolve(){......
  • [ARC189B] Minimize Sum 题解
    场上被创死了。思路考虑一次操作会造成什么影响。加入操作的是:\[x_1,x_2,x_3,x_4\]它们会变成:\[x_1,x_1+x_4-x_3,x_1+x_4-x_2,x_4\]发现没有什么规律。考虑它们的差分序列:\[x_1,x_4-x_3,x_3-x_2,x_2-x_1\]改变为交换\(2,4\)的差分。那么修改就变成很简单的形式了。......
  • Atcoder Beginner Contest 380 (D~G)
    D.StrangeMirroring题意:给定一个只含有大小写字母的字符串$S$。现在对这个字符串操作无数次:对于$S$的每个字符,若是大写字母就改为对应的小写字母,否则改成对应的大写字母,形成一个新的字符串$T$。将$S$和$T$首尾连接,形成新的$S$。现在给定$Q$次......
  • [题解](更新中)AtCoder Beginner Contest 383(ABC383) A~E
    A-Humidifier1照题意模拟即可,时间复杂度\(O(n)\)。点击查看代码#include<bits/stdc++.h>#defineintlonglong#defineN110usingnamespacestd;intn,t[N],v[N],sum;signedmain(){ cin>>n; for(inti=1;i<=n;i++)cin>>t[i]>>v[i]; for(inti=1......
  • 【Atcoder】【ABC383】A- Humidifier 1加湿器 题解
    前言不知道大家有没有关注过AtCoder这是小日子那边的一个网站,每周都会有比赛比起CF等等,最大的优点就是延迟低,题目质量也不错计划以后每周更新题解了正文题目传送门A-Humidifier1题目大意有一个加湿器,给定有次操作,第次在时间加入胜水然而,如果加湿器里有水,它每个单......
  • Offline Regularised Reinforcement Learning for Large Language Models Alignment
    本文是LLM系列文章,针对《OfflineRegularisedReinforcementLearningforLargeLanguageModelsAlignment》的翻译。用于大型语言模型对齐的离线正则化强化学习摘要1引言2背景3直接奖励优化4实验5相关工作6结论和局限性摘要无论是通过人类反馈的强......
  • Daiwa Securities Co. Ltd. Programming Contest 2024(AtCoder Beginner Contest 383)-C
    题目大意一个\(H\)行和\(W\)列的网格图。\((i,j)\)表示从上到下第\(i\)行和从左到下第\(j\)列的单元格。每个单元格用字符\(S_{i,j}\)表示。如果\(S_{i,j}\)为#,则该单元格有一个障碍物;如果\(S_{i,j}\)是.则该单元格是空的;如果\(S_{i,j}\)为H,则该单元网格图......
  • AtCoder Beginner Contest 383 赛后复盘
    C>>>>>>>>D。A模拟即可。B唯一坑点是被染湿的格子不一定要和加湿器连通,枚举两个加湿器然后计算所有点即可,时间复杂度\(O(h^3m^3)\)。点击查看代码#include<bits/stdc++.h>#definelllonglong#definei128__int128#definemem(a,b)memset((a),(b),sizeof(a))#def......