首页 > 其他分享 >SP30906 解题报告

SP30906 解题报告

时间:2024-09-04 20:36:04浏览次数:10  
标签:报告 SP30906 res 修改 int qc 解题 操作 include

题目传送门

题目大意:

给定一个长度为 \(n\) 的序列,\(q\) 次询问区间 \([l, r]\) 内只出现过一次的数有多少个。

思路:

很明显带修莫队可以做。

复习一下,带修莫队就是在普通莫队的基础上加上了时间轴,把操作分为询问操作和修改操作两种分别存下来。

因为修改是有顺序的,每次修改只会会对它之后的查询操作有变动,而对它之前的查询不影响。

令当前时间为 \(t\),若当前时间小于所处理的查询操作的时间,就将时间往后推进,增添几个修改,反之时间回溯,减少几个修改,直到当前的所有变量与所查询区间重合。

通俗地讲,就是再弄一指针,在修改操作上跳来跳去,如果当前修改多了就改回来,改少了就改过去,直到次数恰当为止。

排序也需要加上时间这一关键字。

就题而言,因为只要求出现一次的数字个数,所以在加数时若没出现过则答案 \(+1\),否则若刚好出现过一次就要 \(-1\)。删数操作大同小异。

\(\texttt{Code:}\)

#include <cmath>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

const int N = 200010;

int n, m;
int a[N];
int len;
inline int get(int x) {return x / len;}

struct Q{
    int id, l, r, t;
    bool operator <(const Q &o) const{
        if(get(l) != get(o.l)) return l < o.l;
        if(get(r) != get(o.r)) return r < o.r;
        return t < o.t; 
    }
}q[N];
int ttq;
struct M{
    int x, y;
}qc[N];
int ttc;
int cnt[N];
int ans[N];

inline void add(int x, int &res) {
    if(!cnt[x]) res++;
    else if(cnt[x] == 1) res--;
    cnt[x]++;
}

inline void del(int x, int &res) {
    cnt[x]--;
    if(!cnt[x]) res--;
    else if(cnt[x] == 1) res++;
}

int main() {
    scanf("%d%d", &n, &m);
    for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
    int op, x, y;
    while(m--) {
        scanf("%d%d%d", &op, &x, &y);
        if(op == 2) q[++ttq] = {ttq, x + 1, y + 1, ttc};
        else qc[++ttc] = {x + 1, y};
    }
    len = pow(n, 2.0 / 3); //从队内大佬处学来的玄学块长
    sort(q + 1, q + ttq + 1);
    int id, l, r, tg;
    for(int i = 0, j = 1, t = 0, k = 1, res = 0; k <= ttq; k++) {
        id = q[k].id, l = q[k].l, r = q[k].r, tg = q[k].t;
        while(i < r) add(a[++i], res);
        while(i > r) del(a[i--], res);
        while(j < l) del(a[j++], res);
        while(j > l) add(a[--j], res);
        while(t < tg) {
            ++t;
            if(qc[t].x >= j && qc[t].x <= i) {
                del(a[qc[t].x], res);
                add(qc[t].y, res);
            }
            swap(a[qc[t].x], qc[t].y);
        }
        while(t > tg) {
            if(qc[t].x >= j && qc[t].x <= i) {
                del(a[qc[t].x], res);
                add(qc[t].y, res);
            }
            swap(a[qc[t].x], qc[t].y);
            --t;
        }
        ans[id] = res;
    }
    for(int i = 1; i <= ttq; i++)
        printf("%d\n", ans[i]);
    return 0;
}

标签:报告,SP30906,res,修改,int,qc,解题,操作,include
From: https://www.cnblogs.com/Brilliant11001/p/18397299

相关文章

  • AtCoder Beginner Contest 369 题ABCD详细题解--包含解题思路和两种语言(C++,Python)
    前言:    本文为AtCoderBeginnerContest369题ABCD详细题解,包括题目大意,详细的解题思路和两种语言描述,觉的有帮助或者写的不错可以点个赞几天前的比赛拖的有点久了比赛题目连接:Tasks-AtCoderBeginnerContest369目录题A:题目大意和解题思路:代码(C++):......
  • 软件项目管理资料归总(规格说明书;详细设计;测试计划;验收报告)
     前言:在软件开发过程中,文档资料是非常关键的一部分,它们帮助团队成员理解项目需求、设计、实施、测试、验收等各个环节,确保项目的顺利进行。以下是各个阶段的文档资料概述:软件项目管理部分文档清单: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研......
  • 零转向平台割草机行业发展战略规划报告-聚亿信息咨询
    【出版机构】:聚亿信息咨询 (广东) 有限公司聚亿信息咨询(Market Monitor Global)调研机构最新发布了【零转向平台割草机市场调研报告,全球行业规模展望2024-2030】。本市场调研报告为读者提供专业且深入的产品销量、收入、价格、增长率、市场占有规模及竞争对手等数据分析,包含分......
  • 全球多模多频卫星定位芯片行业市场发展预测报告-聚亿信息咨询
    【出版机构】:聚亿信息咨询 (广东) 有限公司聚亿信息咨询(Market Monitor Global)调研机构最新发布了【多模多频卫星定位芯片市场调研报告,全球行业规模展望2024-2030】。本市场调研报告为读者提供专业且深入的产品销量、收入、价格、增长率、市场占有规模及竞争对手等数据分析,包......
  • Pytest解决报告日志等相对路径问题
    我们在使用pytest搭建测试框架时,有时候为了方便会将生成报告/日志等参数直接作为默认参数配置在pytest.ini中,如pytest.ini[pytest]addopts=-v--html=reports/report.html--alluredir=reports/allure_resultslog_file=logs/test.log需要pipinstallpytestpytest-h......
  • 程序设计专业的毕业生,要怎么写开题报告呢?开题报告对写论文重要吗?
    好的,我们来聊聊程序设计专业的大学生怎样写开题报告,以及它的重要性:想象一下,开题报告就像是你即将开启的编程项目的预告片。它不需要剧透所有精彩的代码和算法,但得抓住人的眼球,让人明白你要做什么,为什么要做,以及你打算怎么做。“怎么写?” 1.“标题“:就像给你的程序取个响......
  • iLogtail 开源两周年:社区使用调查报告
    作者:玄飏iLogtail作为阿里云开源的可观测数据采集器,以其高效、灵活和可扩展的特性,在可观测采集、处理与分析领域受到了广泛的关注与应用。在iLogtail两周年之际,我们对iLogtail开源社区进行了一次使用调研,旨在深化理解用户初次接触与采纳iLogtail的最佳路径,同时为促进社区生......
  • iLogtail 开源两周年:社区使用调查报告
    作者:玄飏iLogtail作为阿里云开源的可观测数据采集器,以其高效、灵活和可扩展的特性,在可观测采集、处理与分析领域受到了广泛的关注与应用。在iLogtail两周年之际,我们对iLogtail开源社区进行了一次使用调研,旨在深化理解用户初次接触与采纳iLogtail的最佳路径,同时为促进社区......
  • 数字政务行业ITSM案例分析报告
    一、项目背景随着电子政务的快速发展,政府机构面对海量数据和服务请求的压力不断增加。信息中心作为承载这些服务的核心部门,其运维现状表现出以下几个特点:信息化建设虽然推进迅速,但运维服务却相对滞后,运维体系尚未形成系统化、规范化的管理,尤其是在应对日益增长的服务请求时显得力......
  • 【开题报告】基于Springboot+vue基于Vue的交通管理系统的设计与实现(程序+源码+论文)
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着城市化进程的加速,交通问题日益成为制约城市发展的重要因素。交通拥堵、事故频发、管理效率低下等问题不仅影响了市民的出行体验,也对城市的经济社......