(待修莫队 没过! 抽空在检查)Dynamic len(set(a[L:R])) UVA - 12345
- #include <iostream>
- #include <cstdio>
- #include <sstream>
- #include <cstring>
- #include <map>
- #include <set>
- #include <vector>
- #include <stack>
- #include <queue>
- #include <algorithm>
- #include <cmath>
- #define MOD 2018
- #define LL long long
- #define ULL unsigned long long
- #define Pair pair<int, int>
- #define mem(a, b) memset(a, b, sizeof(a))
- #define _ ios_base::sync_with_stdio(0),cin.tie(0)
- //freopen("1.txt", "r", stdin);
- using namespace std;
- const int maxn = , INF = 0x7fffffff;
- int n, m, pos[maxn], s[], c[maxn], ans, t[maxn];
- int qsz, csz;
- struct node
- {
- int l, r, t, id, res;
- }Node[maxn];
- void add(int l, int r, int t, int id)
- {
- Node[id].l = l;
- Node[id].r = r;
- Node[id].t = t;
- Node[id].id = id;
- }
- int l = , r = , T = ;
- struct change
- {
- int pos, Old, New;
- }Cha[maxn];
- void add_(int pos, int New, int Old, int cnt)
- {
- Cha[cnt].pos = pos;
- Cha[cnt].New = New;
- Cha[cnt].Old = Old;
- }
- bool cmp(node a, node b)
- {
- if(pos[a.l] == pos[b.l])
- {
- if(pos[a.r] == pos[b.r])
- return a.t < b.t;
- return pos[a.r] < pos[b.r];
- }
- return pos[a.l] < pos[b.l];
- }
- bool cmp_id(node a, node b)
- {
- return a.id < b.id;
- }
- void ad(int val)
- {
- s[val]++;
- if(s[val] == )
- ans++;
- }
- void de(int val)
- {
- s[val]--;
- // cout<< ans <<endl;
- if(s[val] == )
- ans--;
- }
- void go(int idx, int val)
- {
- if(l <= idx && idx <= r)
- {
- de(c[idx]);
- ad(val);
- }
- c[idx] = val;
- }
- int main()
- {
- qsz = csz = ;
- ans = ;
- scanf("%d%d", &n, &m);
- for(int i=; i<=n; i++)
- {
- scanf("%d", &c[i]);
- t[i] = c[i];
- }
- int block = pow(n, 2.0/);
- for(int i=; i<=n; i++)
- pos[i] = (i-)/block + ;
- for(int i=; i<=m; i++)
- {
- char str[];
- int x, y;
- scanf("%s%d%d", str, &x, &y);
- if(str[] == 'Q')
- {
- add(++x, y, csz, ++qsz);
- }
- else
- {
- add_(++x, y, t[x], ++csz);
- t[x] = y;
- }
- }
- sort(Node+, Node++qsz, cmp);
- // for(int i=1; i<=qsz; i++)
- // cout<< Node[i].l << " " << Node[i].r << endl;
- for(int i=; i<=qsz; i++)
- {
- for(; T < Node[i].t; T++)
- go(Cha[T+].pos, Cha[T+].New);
- for(; T > Node[i].t; T--)
- go(Cha[T].pos, Cha[T].Old);
- for(; r < Node[i].r; r++)
- ad(c[r+]);
- for(; r > Node[i].r; r--)
- de(c[r]);
- for(; l < Node[i].r; l++)
- de(c[l]);
- for(; l > Node[i].l; l--)
- ad(c[l-]);
- // for(; T < Node[i].t; T++)
- // go(Cha[T+1].pos, Cha[T+1].New);
- // for(; T > Node[i].t; T--)
- // go(Cha[T].pos, Cha[T].Old);
- Node[i].res = ans;
- }
- sort(Node+, Node+qsz+, cmp_id);
- for(int i=; i<=qsz; i++)
- printf("%d\n",Node[i].res);
- return ;
- }
(待修莫队 没过! 抽空在检查)Dynamic len(set(a[L:R])) UVA - 12345的更多相关文章
- P1903 [国家集训队]数颜色 / 维护队列(带修莫队)
题目描述: 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. ...
- BZOJ 4129 Haruna’s Breakfast ( 树上带修莫队 )
题面 求树上某路径上最小的没出现过的权值,有单点修改 添加链接描述 分析 树上带修莫队板题,问题是怎么求最小的没出现过的权值. 因为只有nnn个点,所以没出现过的最小值一定在[0,n][0,n][0, ...
- BZOJ 3052/Luogu P4074 [wc2013]糖果公园 (树上带修莫队)
题面 中文题面,难得解释了 BZOJ传送门 Luogu传送门 分析 树上带修莫队板子题... 开始没给分块大小赋初值T了好一会... CODE #include <bits/stdc++.h&g ...
- LUOGU P4074 [WC2013]糖果公园 (树上带修莫队)
传送门 解题思路 树上带修莫队,搞了两天..终于开O2+卡常大法贴边过了...bzoj上跑了183s..其实就是把树上莫队和带修莫队结合到一起,首先求出括号序,就是进一次出一次那种的,然后如果求两个点 ...
- P5168 xtq玩魔塔 [克鲁斯卡尔重构树+带修莫队]
P5168 xtq玩魔塔 又是码农题- 利用克鲁斯卡尔重构树的性质 我们就可以得出 \(dep\) 值小的,肯定比 \(dep\) 大的值要优. 于是第二问就可以直接 LCA 求出来了- 至于第三问, ...
- CF940F Machine Learning(带修莫队)
首先显然应该把数组离散化,然后发现是个带修莫队裸题,但是求mex比较讨厌,怎么办?其实可以这样求:记录每个数出现的次数,以及出现次数的出现次数.至于求mex,直接暴力扫最小的出现次数的出现次数为0的正 ...
- 【BZOJ-3052】糖果公园 树上带修莫队算法
3052: [wc2013]糖果公园 Time Limit: 200 Sec Memory Limit: 512 MBSubmit: 883 Solved: 419[Submit][Status] ...
- 「洛谷1903」「BZOJ2120」「国家集训队」数颜色【带修莫队,树套树】
题目链接 [BZOJ传送门] [洛谷传送门] 题目大意 单点修改,区间查询有多少种数字. 解法1--树套树 可以直接暴力树套树,我比较懒,不想写. 稍微口胡一下,可以直接来一个树状数组套主席树,也就是 ...
- BZOJ2120 数颜色 莫队 带修莫队
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2120.html 题目传送门 - BZOJ2120 题意 给定一个长度为 $n$ 的序列 $a$ ,有 ...
随机推荐
- 【Python学习笔记之三】lambda表达式用法小结
除了def语句之外,Python还提供了一种生成函数对象的表达式形式.由于它与LISP语言中的一个工具很相似,所以称为lambda.就像def一样,这个表达式创建了一个之后能够调用的函数,但是它返回了 ...
- Xshell6远程访问linux及Xftp6远程针对linux系统中文件操作(附图文详解)
1.首先我们需要先做好前期准备工作,需要到XManager6官网上将Xshell及Xftp下载并安装,安装过程一直下一步就好了.这里是其官网:http://www.xshellcn.com/.安装完成 ...
- (转)CentOS7系统信息及运行情况查看
原文链接:https://blog.csdn.net/qq_42196196/article/details/85063911 系统信息 CPU信息 内存信息 显卡信息 硬盘信息 网络信息 用户信息 ...
- Flash导出安卓端apk
最近外甥女在学校做了一个演示视频,基于flash做的,希望小舅给她导出成可以运行在pc/android端的可执行程序.看了下过程还是蛮复杂的,还只能一天时间.重新照葫芦画瓢做一款是来不及了,由于以前基 ...
- github在版本库中删除某个文件的所有历史记录
github的目的就是版本控制,记录每一个版本的变动.然而有的时候我们往往希望从版本库中彻底删除某个文件,不再显示在历史记录中.例如不小心上传了一堆错误的文件,或者不小心上传了帐号.密码,那么这个时候 ...
- 欢迎来怼--第三十六次Scrum会议
一.小组信息 队名:欢迎来怼 小组成员 队长:田继平 成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文 小组照片 二.开会信息 时间:2017/12/1 11:35~11:55,总计20min. 地点 ...
- OO第二阶段作业总结
第五次作业: 设计策略: 本次作业设计的基本思路是按照指导书所给的推荐方法来完成的,即共用对象为队列盘,线程有电梯.调度器.以及扫描器,扫描器将控制台输入的有效指令加入到队列盘中,调度 ...
- Failed to execute request because the App-Domain could not be created. Error: 0x8007000e 存储空间不足,无法完成此操作。
今天业务发现,服务器上的网站无法访问了. 页面报错: Server Application UnavailableThe web application you are attempting to a ...
- 【CSAPP笔记】14. 异常控制流和进程
从给处理器加电,到断电为止,处理器做的工作其实就是不断地读取并执行一条条指令.这些指令的序列就叫做 CPU 的控制流(control flow).最简单的控制流是"平滑的",也就是 ...
- Beta 冲刺 (3/7)
队名:日不落战队 安琪(队长) 过去两天完成了那些任务 上传个人信息. 接下来的任务 建立和上传收藏夹. 还剩下的任务 完善手写涂鸦. 社交模块. 遇到的困难 暂无. 有哪些收获和疑问 收获:okht ...