【BZOJ 2120】【国家集训队 2011】【数颜色】

C++ 工程实践(9):数据抽象 陈硕 (giantchen_AT_gmail)http://blog.youkuaiyun.com/Solstice  http://weibo.com/giantchen陈硕关于 C++ 工程实践的系列文章: http://blog.youkuaiyun.com/Solstice/category/8 阅读详情

首先这题暴力可过,没事干就别写正解。。。

正解是三维带修改莫队,在普通莫队基础上再加上一个时间维,作为第三关键字参与排序,但是时间的转移十分蛋痛。。。

如果时间转移的下标在[L,R]内,就要对ans进行维护,同时对数组修改。如果不在,就只对数组修改。。。

code:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
struct hp{
	int st,l,r,tim,num;
}qst[100001];
int L,R,TIM,n,m,ans=0,a[100001],b[200002],c[100001];
int num[100001],change[100001][3],size,ansi[100001];
int cmp(const hp &a,const hp &b)
{
	if ((a.st<b.st)||(a.st==b.st&&a.r<b.r)||(a.st==b.st&&b.r==a.r&&a.tim<b.tim))
	  return 1;
	else return 0;
}
void work(int i)
{
	int l=qst[i].l,r=qst[i].r,tim=qst[i].tim;
    if (l!=r)
      {
	    while (L<l)
	      {
	        if (num[a[L]]==1) ans--;
	        num[a[L]]--;
	        L++;
	      }
	    while (L>l)
	      {
	        L--;
	        if (!num[a[L]]) ans++;
	        num[a[L]]++;
	      }
	    while (R<r)
	      {
	        R++;
	        if (!num[a[R]]) ans++;
	        num[a[R]]++;
	      }
	    while (R>r)
	      {
	        if (num[a[R]]==1) ans--;
	        num[a[R]]--;
	        R--;
	      }
      }
    while (tim>TIM)
      {
      	TIM++;
      	if (L<=change[TIM][0]&&change[TIM][0]<=R)
      	  {
      	    num[change[TIM][1]]--;
      	    if (num[change[TIM][1]]==0) ans--;
      	    num[change[TIM][2]]++;
      	    if (num[change[TIM][2]]==1) ans++;
      	  }
        a[change[TIM][0]]=change[TIM][2]; 
      }
    while (tim<TIM)
      {
        if (L<=change[TIM][0]&&change[TIM][0]<=R)
	      {
	        num[change[TIM][2]]--;
	        if (num[change[TIM][2]]==0) ans--;
	        num[change[TIM][1]]++;
	        if (num[change[TIM][1]]==1) ans++;
	      }
        a[change[TIM][0]]=change[TIM][1];
        TIM--;
      }
    if (qst[i].num) ansi[qst[i].num]=ans;
}
int main()
{
	int i,per,numi=0,time=0; 
	char opt;
	scanf("%d%d",&n,&m); per=sqrt(n);
	for (i=1;i<=n;++i)
	  {
	    scanf("%d",&a[i]);
	    c[i]=b[i]=a[i];
      }
    b[0]=n;
	for (i=1;i<=m;++i)
	  {
	    scanf("%c",&opt);
	    while (opt!='Q'&&opt!='R')
		  scanf("%c",&opt); 
	    if (opt=='Q')
	      {
	        scanf("%d%d",&qst[i].l,&qst[i].r);
	        qst[i].st=qst[i].l/per+1; 
	        qst[i].num=++numi; qst[i].tim=time;
	      }
	    if (opt=='R')
	      {
	      	time++;
	        scanf("%d%d",&qst[i].l,&change[time][2]);
	        qst[i].r=qst[i].l; qst[i].st=qst[i].l/per+1;
	        qst[i].tim=time; qst[i].num=0;   
			change[time][0]=qst[i].l; change[time][1]=c[qst[i].l]; c[qst[i].l]=change[time][2];
			b[++b[0]]=change[time][2]; 
	      }
	  }
	sort(b+1,b+b[0]+1);
	size=unique(b+1,b+b[0]+1)-b-1;
	for (i=1;i<=n;++i)
	  a[i]=upper_bound(b+1,b+size+1,a[i])-b-1;
	for (i=1;i<=time;++i)
	  {
	  	change[i][1]=upper_bound(b+1,b+size+1,change[i][1])-b-1;
	    change[i][2]=upper_bound(b+1,b+size+1,change[i][2])-b-1;
      }
	sort(qst+1,qst+m+1,cmp);
	
	L=qst[1].l; R=qst[1].r; 
	for (TIM=1;TIM<=qst[1].tim;++TIM)
	  a[change[TIM][0]]=change[TIM][2];  
	for (i=qst[1].l;i<=qst[1].r;++i)
	  {
	    if (num[a[i]]==0) ans++; 
		num[a[i]]++; 
	  }
	if (qst[1].num) ansi[qst[1].num]=ans;
	
	TIM=qst[1].tim;
	for (i=1;i<=m;++i)
	  work(i);
	for (i=1;i<=numi;++i)
	  printf("%d\n",ansi[i]);
}

超越图灵机——论人工智能实现的可能性(一) 超越图灵机——论人工智能实现的可能性(一)我认为人工智能是可以实现到逻辑思维这一步的,因为逻辑思维可以完全用字符串来表示,图灵机可以把任意单元置成任意值,在这一点上是完备的,这就足以描述逻辑思维了,所以用图灵机完全可以实现到逻辑思维。当然图灵机会受到哥德尔不完备性的制约,但是逻辑系统也会受到同样的制约,所以我认为完全可以用图灵机实现逻辑思维。那么逻辑思维的本质机理与图灵机是什么关系?逻辑思 阅读详情

相关推荐

OriginPro实战:5步搞定碳材料拉曼光谱D峰G峰分析(附完整数据处理流程)

本文详细介绍了使用OriginPro进行碳材料拉曼光谱D峰G峰分析的完整流程,涵盖数据预处理、多图层可视化、高精度分峰拟合等关键步骤。特别针对材料科学研究中的基线漂移、多峰重叠等问题提供专业解决方案,帮助研究者快速完成从原始数据到科研级图表的全流程分析,提升碳材料表征效率与准确性。

vodka的博客 942

[国家集训队]数颜色 / 维护队列 (带修莫队模板题)

题意: 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会向你发布如下指令: 1、 Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔。 2、 R P Col 把第P支画笔替换为颜色Col。 为了满足墨墨的要求,你知道你需要干什么了吗? 思路: 如果没有修改的话,那么就可以用莫队很轻松的做出来(或者是主席树)。 但是带了修改我们该怎么办呢,带修莫队或者(树套树)。 空间 时间 树套树 O(nlogn2)O(nlogn^2)O(nlo

xxxxxiao123的博客 311

ESP8266+ITR8307实战:如何用反射式光电管实现5cm远距离检测(附避坑指南)

本文详细介绍了如何利用ESP8266的ADC功能与ITR8307反射式光电管,通过调制解调、硬件电路优化及软件同步采样策略,实现5cm稳定远距离检测。文章提供了完整的硬件设计、代码实现与调优避坑指南,有效解决了环境光干扰与信号衰减难题,适用于智能车、自动化等需要可靠非接触检测的项目。

rgv234567的博客 264

P1903 [国家集训队] 数颜色 / 维护队列

带修改的莫队就是在基础莫队的基础上增加了一维属性,之前只需要维护l,r现在还需要维护一下时间t,排序还是先按照左端点块儿号排序,然后右端点块儿号排序,最后按时间排序。其它的都是差不多的。

qq_64468032的博客 174

零代码搭建专业知识库:Wiki.js+cpolar让团队协作像写笔记一样简单

"项目文档又找不到了!“团队负责人小张第N次在群里看到这样的抱怨——技术文档分散在邮件、网盘和个人电脑里,新人入职要花一周熟悉文档位置,远程协作时版本混乱更是家常便饭。Wiki.js与cpolar内网穿透服务的出现,就像给团队协作装上了"中央大脑”,用写Markdown笔记的简单方式,搭建一个专业的知识库系统。普通人对知识管理的需求其实很简单:方便记录、容易查找、大家能用。但传统方案把这个过程搞得异常复杂:建服务器、配环境、学语法、搞权限……大部分团队还没开始就放弃了。

Yawesh的博客 2039

LaTeX参考文献格式apsrev4-1,增加文献标题

APS的LaTeX参考文献格式apsrev4-1是隐藏标题的,如果想要出现标题,需要更改apsrev4-1.bst文件内容 在apsrev4-1.bst文件靠后部分,定义不同类型文献格式的地方,将article类型的内容替换为, FUNCTION {article} { output.bibitem format.authors booktitle empty$ { "author" output.check }{ output } if$ author format.

loading1234567的博客 5031

洛谷 P1903 [国家集训队]数颜色/维护序列(树套树)

树状数组套主席树

wyzz_yz的博客 1126

多周期路径及set_multicycle_path详解

默认情况下,每条路径都被定义为单周期,即源触发器在时钟的任一边沿启动(launch)的数据都应该由目的触发器在时钟的下一上升沿捕获(capture)。 有的设计需要在数据被捕获前提供一些额外的周期,这类路径被称为多周期路径。 一、set_multicycle_path命令 命令格式如下: set_multicycle_path .........

Jackiezhang1993的博客 4万+

P1903 [国家集训队]数颜色

题目大意: 给你一个长度为N数列,然后你有M个操作,操作分为两种,一个是把数列的某个数改成y,另一个是求出l到r区间有多少个不一样的数。N&lt;10000,M&lt;10000.给出的数为1~1000000之间 思路: 刚开始看完题以为是线段树加树状数组==在中山见过==不过这题的数据范围很小,N*M都可以过这题,然后不同数的判断方法可以用桶,然后就没有了。。 程序: #inclu...

学习成神之路 359

使用qt+PaddleOCR做一个OCR软件demo

文章目录使用qt+PaddleOCR做一个OCR软件demo效果展示1 建立环境1.1 vs项目环境1.2 qtcreator项目环境1.2.1 源代码整理1.2.2 依赖项整理如下1.2.3 模型文件如下1.2.4 在.pro文件中设置依赖库的模式1.2.5 pro文件中添加.h和.lib2 在工程代码中添加截图功能2.1 新建截图类并连接信号2.2 QImage转cv::Mat3 在工程代码中集成PaddleOCR3.1 初始化PaddleOCR3.2 修改文字识别类的run函数,增加一个返回结果的值的

ShareProgress的博客 9305

VS2019中C++动态链接库(DLL)的创建与调用

VS2019中C++动态链接库(DLL)的创建与调用,及一些进阶技巧。

qq_42232522的博客 7562

重走长征路---OI每周刷题记录---5月3日 2014

总目录详见https://blog.youkuaiyun.com/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做。2018-11-28 重走长征路---OI每周刷题记录---5月3日  2014 本周共计32题+题 测评地址: 二分+分块: 1.「bzoj2453」维护队列  2.「bzoj2120」数颜色   //在线测评地址https://...

mrcrack的博客 376

用树莓派Pico低成本更新USB-C PD控制器固件实战指南

固件更新是嵌入式系统开发与维护中的核心环节,它直接决定了硬件设备的功能、性能与兼容性。其原理通常是通过特定的通信接口(如SWD、JTAG、UART或USB)与设备内部的Bootloader建立连接,将新的程序代码安全写入非易失性存储器。在USB Power Delivery(PD)和Type-C生态中,固件更新技术尤为重要,它能修复协议握手Bug、适配新设备并提升供电策略的灵活性。本文聚焦于一个典型的工程实践场景:如何利用广泛普及且成本极低的树莓派Pico开发板,作为USB-C协议到I²C协议的转换桥,实现

weixin_27869497的博客 458

【带修莫队】【国家集训队】数颜色

/* Luogu P1903 数颜色 by sbn 2018-4-25 */ #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cstdlib&gt; #include&lt;algorithm&gt; #include&lt;cstring&gt; #include&lt;queue&gt; #include&lt;...

u014681071的博客 245

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

[国家集训队2011]happiness(吴确)…

题目: http://cogs.pro/cogs/problem/problem.php?pid=1873 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友。这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友如果能同时选文科或者理科,那么他们又将收获一些喜悦值。作为计算机竞赛教练的scp大老板,想知道如何分配可以使得全班的

uKJLThHU$(eQ 1321

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

[国家集训队]数颜色

[国家集训队]数颜色 题解 很水的一道带修莫队板子题。 我们只需要将操作时间看作是当前询问的第三维,排序后跑莫队即可。 三维莫队块长为n23n^{\frac{2}{3}}n32​时时间复杂度是最优的,总时间复杂度为O(n56)O\left(n^{\frac{5}{6}}\right)O(n65​)。 可以通过块的奇偶来调整排序是从小往大还是从大往小来卡常。 很容易就解决了。 源码 #include<cstdio> #include<cmath> #include<cstring

StaroForgin的博客 221

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【洛谷】P1903 [国家集训队]数颜色 / 维护队列 带修莫队

题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会向你发布如下指令: 1、 Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔。 2、 R P Col 把第P支画笔替换为颜色Col。 为了满足墨墨的要求,你知道你需要干什么了吗? 输入格式 第1行两个整数N,M,分别代表初始画笔的数量以及墨墨会做的事情的个数。 第2行N个整数,分别代表初始画笔排中第i支画笔的颜色。 第3行到第2+M行,每行分别代表墨墨会做的一件事情,格式见题干部分。 输出格

待到山花烂漫时 379

P1903 [国家集训队]数颜色 / 维护队列

毒瘤数据卡普通莫队!! 这道题跟普通的莫队题目差不多,但是多了一个修改操作。 所以带修莫队就横空出世了。 普通莫队记录左端点和右端点,那么这里就再记录一个时间轴,表示当时已经执行过几次修改。 之后莫队模板就有六个while,前四个是一样的。 最后两个判断当前修改次数和目标修改次数的关系。这个就是灵魂了。 重点看这个时间轴上的修改吧。 void change(int idx, int i)...

dianshu0741的博客 169

题解 【国家集训队2011】数颜色

题面 解析 这题也就是一个带修改的莫队啊啊!! 所以,我们只需要在普通莫队上加上一维时间即可。 怎么加呢? 只需要记录下每次修改和查询的时间, 在左右端点跳跃的同时,也将时间跳到询问的时间就行了。 具体看代码吧: // luogu-judger-enable-o2 #include<bits/stdc++.h> using namespace std...

weixin_30784141的博客 150

[国家集训队]数颜色 / 维护队列

毒瘤莫队卡常题,卡了一早上的常数,才开O2勉强过。 带修莫队模板题。 普通莫队要离线下来做,遇到这种带修改的题目直接就萎了,但是全国广大的OIer们在莫队的基础上,发明了带修莫队这种玄学算法。 具体来说就是给修改和求值打上时间戳,然后在普通莫队双指针的基础上增加一个指针tim指向时间,在这一个维度上面跳来跳去,直到跳到左指针指向左端点,右指针指向右端点,tim指针指向当前求值的时间...

weixin_30408165的博客 189

洛谷 P1903 [国家集训队]数颜色 带修改的莫队算法

题目: 洛谷 P1903分析:很显然的待修改的莫队。第一次打,感觉有点丑。代码:#include <iostream> #include <cstdio> #include <algorithm> #include <cmath>const int maxn=10005; const int tot_color=1e6+2; using namespace std;struct node{

liangzihao1的博客 424

[bzoj4241]历史研究

题目大意求区间加权众数。分块大法好显然我们可以用类似苹果树这道题的序列上问题的分块做法解决。 即初始化第i块到第j块的答案,以及每个元素在前i块出现的次数。 然后就很容易做了。#include<cstdio> #include<algorithm> #include<cmath> #define fo(i,a,b) for(i=a;i<=b;i++) #define fd(i,a,b) for(

不来也不去的一只失忆蝴蝶 885

[洛谷P1903][国家集训队]数颜色

题目大意:有$n$支画笔,有两个操作 $Q\;l\;r:$询问$[l,r]$中有几种颜色 $R\;p\;Col:$把第$p$支画笔的颜色改成$Col$ 题解:带修莫队,分为$n^{\frac{1}{3}}$个块,每个块$n^{\frac{2}{3}}$个元素,复杂度$O(n^{\frac{5}{3}})$ 卡点:读入时,修改的时间赋值错 C++ Code: #include...

weixin_33861800的博客 131
上一篇: 分块算法学习记录
下一篇: 【BZOJ 1925】【SDOI 2010】地精部落
Lcomyn
博客等级 码龄12年 14粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值