首页 > 其他分享 >7/13 训练笔记

7/13 训练笔记

时间:2024-07-13 19:40:54浏览次数:10  
标签:q1 13 bel 训练 int rep 笔记 id1 100010

闲话

回滚莫队板题被卡到 28pts 了

歴史の研究

回滚莫队题。莫队笔记

考虑很好加(维护 cnt 并更新答案即可),但是不好删。
那么回滚莫队
代码:

#include <bits/stdc++.h>
#define int long long
#define rep(i, l, r) for (int i = l; i <= r; i++)
#define per(i, l, r) for (int i = l; i >= r; i--)
using namespace std;
int a[100010], bel[100010], ed[100010], ans[100010], n, q1, B, res;
unordered_map<int, int> cnt, cnt1;
int id(int i) { return bel[i]; }
struct query {
    int l, r, id1;
    query(int l = 0, int r = 0, int id1 = 0):l(l), r(r), id1(id1) {}
    bool operator<(query o) {
        return (id(l) != id(o.l)) ? id(l) < id(o.l) : r < o.r;
    }
    query operator=(query o) {
        l = o.l;
        r = o.r;
        id1 = o.id1;
        return *this;
    }
}q[200010];
void add(int x) {
    cnt[x]++;
    res = max(res, cnt[x] * x);
}
int bruteForce(int l, int r) {
    cnt1.clear();
    int res = 0;
    rep (i, l, r) {
        cnt1[a[i]]++;
        res = max(res, a[i] * cnt1[a[i]]);
    }
    return res;
}
signed main() {
    cin >> n >> q1;
    B = sqrt(n);
    rep (i, 1, n) {
        cin >> a[i];
        bel[i] = (i - 1) / B + 1;
        ed[bel[i]] = i;
    }
    rep (i, 1, q1) {
        cin >> q[i].l >> q[i].r;
        q[i].id1 = i;
    }
    sort(q + 1, q + q1 + 1);
    // rep (i, 1, q1) {
    //     cout << q[i].l << " " << q[i].r << " " << id(q[i].l) << "\n";
    // }
    int l = 0, r = -1;
    rep (i, 1, q1) {
        if (id(l) != id(q[i].l)) {
            l = ed[id(q[i].l)];
            r = l - 1;
            res = 0;
            cnt.clear();
        }
        if (id(q[i].r) != id(l)) {
            // if (q[i].l == 2 && q[i].r == 5) {
            //     cout << l << " " << r << "\n";
            // }
            // if (q[i].l == 1 && q[i].r == 7) {
            //     rep (i, 1, n) {
            //         cout << "[ " << a[i] << " " << cnt[a[i]] << " ]" << "\n";
            //     }
            //     cout << l << " " << r << " " << bel[q[i].l] << " " << ed[q[i].l] << " " << res << "\n";
            // }
            while (r < q[i].r) add(a[++r]);
            // if (q[i].l == 1 && q[i].r == 4) {
            //     rep (i, 1, n) {
            //         cout << a[i] << " " << cnt[a[i]] << "\n";
            //     }
            //     cout << res << "\n";
            // }
            int t = res;
            while (l > q[i].l) add(a[--l]);
            // if (q[i].l == 3 && q[i].r == 6) {
            //     rep (i, 1, n) {
            //         cout << a[i] << " " << cnt[a[i]] << "\n";
            //     }
            //     cout << t << " " << res << "\n";
            // }
            // if (q[i].l == 1 && q[i].r == 4) {
            //     cout << t << "\n";
            // }
            ans[q[i].id1] = res;
            res = t;
            l = ed[id(l)];
            rep (j, q[i].l, l - 1) {
                cnt[a[j]]--;
            }
        } else {
            ans[q[i].id1] = bruteForce(q[i].l, q[i].r);
        }
    }
    rep (i, 1, q1) {
        cout << ans[i] << "\n";
    }
}

标签:q1,13,bel,训练,int,rep,笔记,id1,100010
From: https://www.cnblogs.com/IANYEYZ/p/18300548

相关文章

  • gcc笔记
    一、.c文件到app的过程二、执行选项gcc-E-ohello.ihello.c//预处理:展开宏,查看头文件gcc-S-ohello.shello.i//编译:形成汇编码gcc-c-ohello.ohello.s//汇编:形成机器码gcc-ohellohello.o//链接三、形成过程四、语法错误,函数申明定义检查时间编译时......
  • python进程和线程_day013
    python进程和线程概念相关进程概览线程概览Python中的多进程Python中的多线程多进程还是多线程单线程+异步I/O(协程)应用案例示例1:将耗时间的任务放到线程中以获得更好的用户体验示例2:使用多进程对复杂任务进行“分而治之”。今天我们使用的计算机早已进入多CPU或多核......
  • 《项目管理》-笔记1
    PMBOK解读1.1项目和项目管理项目:项目是为创造独特的产品、服务或成果而进行的临时性工作。项目管理:在项目的活动中运用知识、技术、工具、技巧,以满足项目要求。1.2十大知识领域(1)项目整合管理项目整合管理包括为识别、定义、组合、统一和协调各项目管理过程组的各种过程和......
  • [笔记] SEW的振动分析工具DUV40A
    1.便携式振动分析仪DUV40A文档编号:26871998/ENSEW是一家国际化的大型的机械设备供应商。产品线涵盖电机,减速机,变频器等全系列动力设备。DUV40A是他自己设计的一款振动分析工具。  我们先看一下它的软硬件参数:内置两路传感器,并且具备外扩三路单自由度传感器的能力。通......
  • Spark _Exam_ 20240713
    SparkExam20240713Conclusion还可以,没有挂分(反向挂分什么鬼)。数据简直太平洋,T1放掉log,T330变80,T410%的特殊case变成30%的特殊casedp还是很不行,其他方面的思维还可以。A.不相邻集合(a)Statement称可重集合\(S\),若满足\(\forallx\inS,x-1\notinS,x+1\notinS\)......
  • 2024-07-13:用go语言,给定一个从0开始的长度为n的整数数组nums和一个从0开始的长度为m的
    2024-07-13:用go语言,给定一个从0开始的长度为n的整数数组nums和一个从0开始的长度为m的整数数组pattern,其中pattern数组仅包含整数-1、0和1。一个子数组nums[i..j]的大小为m+1,如果满足以下条件,则我们称该子数组与模式数组pattern匹配:1.若pattern[k]为1,则nums[i+k+1]>nums[i+k];......
  • 闲话 713
    今天好热,并且才考完试,脑袋有点宕机,因此本文可能有误,如果你发现错误,请告诉我。证明:\[\sum_{d\midn}\frac{\mu(d)}{d}\sum_{k\midd,2\nmidk}\varphi(k)2^{n/k}=\frac{\varphi(n)}n\sum_{d\midn,2\nmidd}2^{n/d}\mu(d)\]我们先证明一个引理。如果\(a\perpb\),\(f(a+b)=f(a)......
  • 2024/7/13 每日一题:数组是否有序
    3011.数组是否可以变为有序给你一个下标从0开始且全是正整数的数组nums。一次操作中,如果两个相邻元素在二进制下数位为1的数目相同,那么你可以将这两个元素交换。你可以执行这个操作任意次(也可以0次)。如果你可以使数组变有序,请你返回true,否则返回false。......
  • 题解:Codeforces CF1613C Poisoned Dagger
    标签:二分题意给定一个长度为\(n\)的序列\(a\),定义数\(k\),对于\(i>1\),如果\(a_i-a_{i-1}<k\),\(s\)加上\(a_i-a_{i-1}\),否则加上\(k\),求满足\(s\geqh\)的最小\(k\)。思路手玩样例,\(k\)越大龙死的越快,所以具有单调性,考虑二分答案。每次缩小范围时判断是否\(k\g......
  • 计算机组成原理考研手写笔记
     1计算机系统概述1.1计算机系统概述1.2指令执行过程1.3计算机性能指标2数据的表示和运算2.1定点数的编码2.2整数类型转换2.3逻辑门电路符号2.4基本运算部件2.5定点数移位运算2.6定点数和无符号数的加减运算2.7加法器原理/补码加减运算电路/A-......