P1903 数颜色
带修莫队题。
在询问上多加一个变量,记录是在那次修改之后的。
然后暴力修改。
就没了。
不过有一些修改的小技巧
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;
const int manx=50010;
int read()//千万不要用快读
{
char c=getchar();
int res=0;
while(c>'9'||c<'0') c=getchar();
while(c>='0'&&c<='9')
{
res=(res<<3)+(res<<1)+c-'0';
c=getchar();
}
return res;
}
bool judge()//我是贞德毒瘤
{
char c=getchar();
while(c<'A'||c>'Z') c=getchar();
if(c=='Q') return false;
return true;
}
struct node
{
int l,r;
int t;//哪一次修改之后
int pos;
};
int qua;
bool compare(const node &a,const node &b)
{
return a.l/qua==b.l/qua ? a.r<b.r : a.l < b.l;
}
node query[manx];
int cha[manx][2],t1,t2;//t1为修改次数,t2为询问次数
int base[manx];
int cont[manx<<5];
int ans[manx];
int l=1,r=0;
int answer;//简单的莫队一些所需要的
void osc(int t)//调整时间
{
while(t1<t)
{
t1++;
if(cha[t1][0]>=l&&cha[t1][0]<=r)
{
cont[cha[t1][1]]+=1,cont[base[cha[t1][0]]]-=1;//如果在当前莫队的区间内,就要单独处理
if(cont[cha[t1][1]]==1) answer+=1;
if(cont[base[cha[t1][0]]]==0) answer-=1;
}
swap(cha[t1][1],base[cha[t1][0]]);//这里便是一个小技巧,直接交换,我们可以自己稍微模拟一下233,这样是不改变正确性的。
}
while(t1>t)//删除同理,很具有对称性
{
swap(cha[t1][1],base[cha[t1][0]]);
if(cha[t1][0]>=l&&cha[t1][0]<=r)
{
cont[cha[t1][1]]-=1,cont[base[cha[t1][0]]]+=1;
if(cont[cha[t1][1]]==0) answer-=1;
if(cont[base[cha[t1][0]]]==1) answer+=1;
}
t1--;
}
return ;
}
void add(int pos)
{
if(!cont[base[pos]]) answer+=1;
cont[base[pos]]+=1;
return;
}//简单的单点修改
void del(int pos)
{
cont[base[pos]]-=1;
if(!cont[base[pos]]) answer-=1;
return ;
}
int main()
{
int n=read(),m=read();
qua=pow(n,0.5);
for(int i=1;i<=n;i++)
base[i]=read();
int a,b;
for(int i=1;i<=m;i++)
{
bool f=judge();
a=read(),b=read();
if(f)
cha[++t1][0]=a,cha[t1][1]=b;
else
query[++t2].l=a,query[t2].r=b,query[t2].t=t1,query[t2].pos=t2;
}
sort(query+1,query+t2+1,compare);
t1=0;
for(int i=1;i<=t2;i++)
{
osc(query[i].t);//除了这一句和上面录入数据不一样,其他和普通莫队就是一样了233
while(r<query[i].r)
add(++r);
while(r>query[i].r)
del(r--);
while(l<query[i].l)
del(l++);
while(l>query[i].l)
add(--l);
ans[query[i].pos]=answer;
}
for(int i=1;i<=t2;i++)
printf("%d\n",ans[i]);
}
P1903 数颜色的更多相关文章
- [bzoj2120] [洛谷P1903] 数颜色
Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜 ...
- 洛谷P1903 数颜色 [国家集训队] 莫队
正解:带修莫队 解题报告: 可以理解为引入时间参数,然后就是有了仨参数,关于这个修改同样的是,如果时间是相同的,不用搞,如果时间不相同做一下时光倒流/时光推移就成嘛 但是肯定既然这样的话,按照原来的s ...
- Bzoj2120/洛谷P1903 数颜色(莫队)
题面 Bzoj 洛谷 题解 考虑对操作离线后分块处理询问操作(莫队算法),将询问操作按照编号分块后左端点第一关键字,右端点第二关键字排序(分块大小为\(n^{\frac 23}\)),对于每一个询问操 ...
- 【Luogu】P1903数颜色(带修改莫队)
题目链接 带修改莫队模板. 加一个变量记录现在是第几次修改,看看当前枚举的询问是第几次修改,改少了就改过去,改多了就改回来. 话说我栈用成队列了能过样例?!!!! 从此深信一句话:样例是出题人精心设计 ...
- bzoj2120 / P1903 [国家集训队]数颜色 / 维护队列(带修改莫队)
P1903 [国家集训队]数颜色 / 维护队列 带修改的莫队 在原有指针$(l,r)$上又添加了时间指针$t$ 贴一段dalao的解释 带修改的莫队,和原版莫队相比,多了一个时间轴 原版莫队是将区间( ...
- 洛谷 P1903 [国家集训队]数颜色 解题报告
P1903 [国家集训队]数颜色 题目描述 墨墨购买了一套\(N\)支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1.Q L R代表询问你从第\(L\) ...
- AC日记——【模板】分块/带修改莫队(数颜色) 洛谷 P1903
[模板]分块/带修改莫队(数颜色) 思路: 带修改莫队: (伏地膜xxy): 代码: #include <bits/stdc++.h> using namespace std; #defi ...
- BZOJ2120/洛谷P1903 [国家集训队] 数颜色 [带修改莫队]
BZOJ传送门:洛谷传送门 数颜色 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R ...
- BZOJ 2120: 数颜色
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 3623 Solved: 1396[Submit][Status][Discuss] ...
随机推荐
- Web 2.0 浏览器端可靠性测试第2部分(如何发现和分析 Web 2.0 浏览器端的内存泄漏)
介绍浏览器端的可靠性测试 在上一编文章中我们介绍了浏览器端可靠性测试的概念.测试方法.以及常用的测试和分析工具.我们知道,浏览器端可靠性测试,就是以浏览器为测试平台,通过模拟用户在真实场景下的页面操作 ...
- python 16 进程和线程
进程和线程 很多同学都听说过,现代操作系统比如Mac OS X,UNIX,Linux,Windows等,都是支持“多任务”的操作系统. 什么叫“多任务”呢?简单地说,就是操作系统可以同时运行多个任务. ...
- hadoop的一些命令技巧
hadoop fs -cat <hdfspath> hadoop fs -cat <hdfspath>|more #more参数可是分页显示文件内容 echo abcd | h ...
- 明码(C++)
2.明码(结果填空) (满分7分) 注意事项:问题的描述在考生文件夹下对应题号的“题目.txt”中.相关的参考文件在同一目录中.请先阅读题目,不限解决问题的方式,只要求提交结果.必须通过浏览器提交答案 ...
- jQuery学习心得
表示在document.ready时执行代码 $(function(){ //1.取得要操作的对象(尽量只限制范围),如果对象多次使用要记得缓存 var $selector = $('selector ...
- Qt 学习(3)
Qt 修改 Windows 注册表项 在使用 FT232R 驱动(usb转串口设备)连接电脑时,下位机发送的数据会被转换器缓存起来,由串口转换器驱动设定的延时定时发送到 PC,这样就造成了一个问题:上 ...
- 你会用setTimeout吗
定义很简单 setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. 广泛应用场景 定时器,轮播图,动画效果,自动滚动等等 上面一些应该是setTimeout在大家心中的样子,因为我们 ...
- JDK一键安装,配置环境
人懒,就得“多干活”! 正常安装JDK 的话,它会修改系统的path 变量,加入自己的调用路径(jre) 这样,我们刚安装好后,就可直接调用java –verbose 查看jre 安装的目录了. ( ...
- WebService的搭建,部署,简单应用和实体类结合使用
WebService:一种跨编程语言和操作系统平台的远程调用技术,SOAP.WSDL(WebServicesDescriptionLanguage).UDDI(UniversalDescription ...
- 在基于WCF开发的Web Service导出WSDL定义问题及自定义wsdl:port 名称
在契约优先的Web服务开发过程中,往往是先拿到WSDL服务定义,各家开发各自的服务实现或客户端,然后互相调用. 尽管Web Service的标准已经发布很多年,但各 ...