首页 > 其他分享 >YACS 2022年9月月赛 甲组 T1 游戏体验 题解

YACS 2022年9月月赛 甲组 T1 游戏体验 题解

时间:2022-10-11 20:45:29浏览次数:69  
标签:YACS int 题解 sum tr 甲组 bst lbst id

目前还没有时间写题解,疯狂复习$CSP$复赛中,这题是个线段树(自己可以探究一下,是动态的)

先贴个标程,需要的,请

#include <bits/stdc++.h>
using namespace std;
int n,m,a[1000005],x[1000005];
int ben[1000005],nxt[1000005],cur[1000005];
long long ans;
struct segment {
    int l, r;
    long long bst, lbst, rbst, sum;
} tr[4000005];
void add(int pos, int num) {
    tr[pos].bst = tr[pos].lbst = tr[pos].rbst = tr[pos].sum = num;
    for (int id = (pos >> 1); id; id >>= 1) {
        tr[id].sum = tr[2 * id].sum + tr[2 * id + 1].sum;
        tr[id].lbst = (tr[2 * id].lbst > tr[2 * id].sum + tr[2 * id + 1].lbst ? tr[2 * id].lbst : tr[2 * id].sum + tr[2 * id + 1].lbst);
        tr[id].rbst = (tr[2 * id + 1].rbst > tr[2 * id + 1].sum + tr[2 * id].rbst ? tr[2 * id + 1].rbst : tr[2 * id + 1].sum + tr[2 * id].rbst);
        long long s = (tr[2 * id].bst > tr[2 * id + 1].bst ? tr[2 * id].bst : tr[2 * id + 1].bst);
        tr[id].bst = (tr[2 * id].rbst + tr[2 * id + 1].lbst > s ? tr[2 * id].rbst + tr[2 * id + 1].lbst : s);
    }
}
int main() {
    ios::sync_with_stdio(false);
    cin >> n;
    for (int i = 1; i <= n; ++i) cin >> a[i];
    cin >> m;
    for (int i = 1; i <= m; ++i) cin >> x[i];
    tr[1].l = 1;
    tr[1].r = m;
    for (int i = 1; i <= 4000000; ++i) {
        if (tr[i].l != tr[i].r) tr[2 * i].l = tr[i].l, tr[2 * i].r = (tr[i].l + tr[i].r) / 2, tr[2 * i + 1].l = (tr[i].l + tr[i].r) / 2 + 1, tr[2 * i + 1].r = tr[i].r;
        else ben[tr[i].l] = i;
    }
    for (int i = m; i; --i) {
        nxt[i] = cur[x[i]];
        cur[x[i]] = i;
    }
    for (int i = 1; i <= n; ++i) {
        if (cur[i]) {
            add(ben[cur[i]], a[i]);
            if (nxt[cur[i]]) add(ben[nxt[cur[i]]], -a[i]);
        }
    }
    for (int i = 1; i <= m; ++i) {
        ans = (ans > tr[1].bst ? ans : tr[1].bst);
        add(ben[i], 0);
        if (nxt[i]) add(ben[nxt[i]], a[x[i]]);
        if (nxt[nxt[i]]) add(ben[nxt[nxt[i]]], -a[x[i]]);
    }
    cout << ans << endl;
    return 0;
}

 

标签:YACS,int,题解,sum,tr,甲组,bst,lbst,id
From: https://www.cnblogs.com/stdios/p/16782498.html

相关文章

  • UVa 11300 Spreading the Wealth 题解
    非常好的一道数学题。原题链接(洛谷)原题链接(UVa)题目分析(参考刘汝佳《算法竞赛入门经典\(\cdot\)训练指南》)本身看起来很复杂。不要急,我们慢慢分析。首先,每个人最终......
  • CF1237F 题解
    传送门题意给你一个\(n\timesm\)的棋盘,上面已经放了\(k\)个\(1\times2\)的骨牌。对于一个骨牌的每个格子,不能有其他骨牌的格子与它在同一行、同一列。你可以......
  • 在实际开发中遇到的各种问题解决方案
    目录第一问:使用axios异步请求完成数据导出(Excel)(基于hutool工具包)(1.1)编写后台接口,获取到response对象以及前端传来的数据,使用@RequestBody获取到需要进行导出的数据id(1.1.1)......
  • [BalticOI 2010] Mines 题解
    你谷linklojlink提供一种时间复杂度正确的高妙做法。首先题目有一条隐藏条件是保证\(n\not\equiv2\pmod3\)或\(m\not\equiv2\pmod3\),需要通过观察数据得到。我们......
  • YACS2022年9月乙组
    T1:区间交集(二)这种统计有多少对满足题意,首先想下暴力\(O(n^2)\)复杂度正解:判断区间是否有交集,其实比较麻烦,怎么简单判断?如果已知左端点的大小顺序,那么判断是否有交集......
  • 2022 ICPC 网络赛(II) H Fast Fourier Transform题解
    简要题意给你一棵树,你可以选若干节点为关键点,定义一个选点方案的价值为:所有路径上没有关键点的点对的距离之和。求所有选点方案的价值之和。题解一开始和队友都读错题了......
  • SCOI 萌萌哒 题解
    下决心写一道题写一篇题解。题目链接考虑暴力,直接并查集合并相同的数,和今天T1一样。考虑优化这个暴力。因为今天T1题解说要倍增,所以考虑一个长的跟ST表一样的倍增。具......
  • 洛谷 P3488 [POI2009]LYZ-Ice Skates 题解
    错解每次跑二分图匹配,时间复杂度显然爆炸。时间复杂度:我被杀手皇后摸过了正解引入Hall定理:设二分图中\(G=<V_1,V_2,E>,|V_1|\le|V_2|\),则G中存在\(V_1\)到......
  • 【题解】XXI Opencup GP of Tokyo Count Min Ratio
    有\(R\)个红球,\(B\)个蓝球和一个绿球,同色球之间无区别。将其任意排列,令\(l_R,l_B,r_R,r_B\)分别为绿球左/右边的红/蓝球数量。定义一个方案的权值为\(\max\{x\i......
  • Criss Cross OJ【R001】8月月赛I题解合集
    R0011.「T1」积木高塔Solution返回题目简要题意:给定一个矩阵,以及其每一格中完全相同立方体的高度(即个数),求:这座高塔最高点的高度。这座高塔从第\(1\)层到最高......