[HEOI2012]采花 树状数组 BZOJ 2743 原创 fish04 2022-05-27 20:19:35 博主文章分类:数据结构 ©著作权 文章标签 #include #define i++ 文章分类 后端开发 ©著作权归作者所有:来自51CTO博客作者fish04的原创作品,请联系作者获取转载授权,否则将追究法律责任 题目描述萧薰儿是古国的公主,平时的一大爱好是采花。今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花。花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于公主采花。公主每次采花后会统计采到的花的颜色数,颜色数越多她会越高兴!同时,她有一癖好,她不允许最后自己采到的花中,某一颜色的花只有一朵。为此,公主每采一朵花,要么此前已采到此颜色的花,要么有相当正确的直觉告诉她,她必能再次采到此颜色的花。由于时间关系,公主只能走过花园连续的一段进行采花,便让女仆福涵洁安排行程。福涵洁综合各种因素拟定了m个行程,然后一一向你询问公主能采到多少朵花(她知道你是编程高手,定能快速给出答案!),最后会选择令公主最高兴的行程(为了拿到更多奖金!)。输入输出格式输入格式:第一行四个空格隔开的整数n、c以及m。接下来一行n个空格隔开的整数,每个数在[1, c]间,第i个数表示第i朵花的颜色。接下来m行每行两个空格隔开的整数l和r(l ≤ r),表示女仆安排的行程为公主经过第l到第r朵花进行采花。输出格式:共m行,每行一个整数,第i个数表示公主在女仆的第i个行程中能采到的花的颜色数。输入输出样例输入样例#1:复制5 3 51 2 2 3 11 51 22 22 33 5输出样例#1: 复制20010说明对于100%的数据,1 ≤ n ≤ 本题有两个subtasksubtask1保证subtask2保证 与HH的项链相似,同样是用树状数组;用nxt表示下一个的位置,nnxt表示下一个的下一个位置;#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include//#include//#pragma GCC optimize(2)using namespace std;#define maxn 2000005#define inf 0x7fffffff//#define INF 1e18#define rdint(x) scanf("%d",&x)#define rdllt(x) scanf("%lld",&x)#define rdult(x) scanf("%lu",&x)#define rdlf(x) scanf("%lf",&x)#define rdstr(x) scanf("%s",x)typedef long long ll;typedef unsigned long long ull;typedef unsigned int U;#define ms(x) memset((x),0,sizeof(x))const long long int mod = 1e6 + 7;#define Mod 1000000000#define sq(x) (x)*(x)#define eps 1e-4typedef pair pii;#define pi acos(-1.0)//const int N = 1005;#define REP(i,n) for(int i=0;i<(n);i++)typedef pair pii;inline int rd() { int x = 0; char c = getchar(); bool f = false; while (!isdigit(c)) { if (c == '-') f = true; c = getchar(); } while (isdigit(c)) { x = (x << 1) + (x << 3) + (c ^ 48); c = getchar(); } return f ? -x : x;}ll gcd(ll a, ll b) { return b == 0 ? a : gcd(b, a%b);}int sqr(int x) { return x * x; }/*ll ans;ll exgcd(ll a, ll b, ll &x, ll &y) { if (!b) { x = 1; y = 0; return a; } ans = exgcd(b, a%b, x, y); ll t = x; x = y; y = t - a / b * y; return ans;}*/int col[maxn];int n, k, m;int c[maxn];int b[maxn];struct node { int l, r, id;}q[maxn];bool cmp(node a, node b) { if(a.l!=b.l)return a.l < b.l; return a.r < b.r;}void add(int x, int y) { while (x <= n) { c[x] += y; x += x & -x; }}int query(int x) { int sum = 0; while (x > 0) { sum += c[x]; x -= x & -x; } return sum;}int fir[maxn];int nxt[maxn], nnxt[maxn];int ct[maxn];int ans[maxn];int main() {// ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); rdint(n); rdint(k); rdint(m); for (int i = 1; i <= n; i++)rdint(col[i]); for (int i = 1; i <= m; i++) { rdint(q[i].l); rdint(q[i].r); q[i].id = i; } for (int i = n; i >= 1; i--) { nxt[i] = fir[col[i]]; fir[col[i]] = i; } for (int i = 1; i <= n; i++)nnxt[i] = nxt[nxt[i]]; for (int i = 1; i <= n; i++)if ((++ct[col[i]]) == 2)add(i, 1); sort(q + 1, q + 1 + m, cmp); int cur = 1; for (int i = 1; i <= m; i++) { for (; cur < q[i].l; cur++) { if (nxt[cur])add(nxt[cur], -1); if (nnxt[cur])add(nnxt[cur], 1); } ans[q[i].id] = query(q[i].r) - query(q[i].l - 1); } for (int i = 1; i <= m; i++)printf("%d\n", ans[i]); return 0;} EPFL - Fighting 赞 收藏 评论 分享 举报 上一篇:方程的解_NOI导刊2010提高(01) 组合数 下一篇:AtCoder - 2566 优先队列 提问和评论都可以,用心的回复会被更多人看到 评论 发布评论 全部评论 () 最热 最新 相关文章 Java 中数组的使用(一维数组和二维数组) 本文详细的介绍了,在Java 中数组的使用,并对其内存存在形式进行了详细的分析。 数组 一维数组 二维数组 java基础 保姆级:Windows Server 2012上安装.NET Framework 3.5 目录一.问题所在无法在安装SQL server2008(2012)1.无法安装一下功能 .NET Framework 3.5二.解决措施1、打开服务器管理器2、添加角色和功能 3、选择安装功能 4、指定备用源路径5、配置本地文件路径一.问题所在无法在安装SQL server2008(2012)1.无法安装一下功能 .NET Framework 3.5如果直接装SQL serve 服务器管理 SQL 无法安装 C++ 获取数组大小、多维数组操作详解 获取数组的大小要获取数组的大小,可以使用 sizeof() 运算符:示例int myNumbers[5] = {10, 20, 30, 40, 50};cout << sizeof(myNumbers);结果:20为什么结果显示为 20 而不是 5,当数组包含 5 个元素时?这是因为 sizeof() 运算符返回类型的大小(以字节为单位)。要找出数组有多少个元素, C/C++ 后端开发 软件工程 程序人生 编程语言 BZOJ 2743 HEOI2012 采花 树状数组 题目大意:给定一个序列,多次询问区间内出现两次以上的数的数量n BZOJ BZOJ2743 树状数组 i++ #include BZOJ 2743: [HEOI2012]采花 离线树状数组 2743: [HEOI2012]采花 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2743 Description 萧芸斓是Z国的公主,平时的一大爱好是采花。 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花。花园足够大,容纳 qt BZOJ2743 [HEOI2012]采花 【离线 + 树状数组】 题目萧芸斓是Z国的公主,平时的一大爱好是采花。 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花。花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于公主采花。公主每次采花后会统计采到的花的颜色数,颜色数越多她会越高兴!同时,她有一癖好,她不... 代码 BZOJ-2743: [HEOI2012]采花(树状数组 or TLE莫队) 2743: [HEOI2012]采花Time Limit: 15 Sec Memory Limit: 128 MBSubmit: 2512 Solved: 1292[Submit][Status][Discuss]Description萧芸斓是Z国的公主,平时的一大爱好是采花。今天天气晴 数据 i++ 初始化 BZOJ 2743 采花(树状数组) 思路:统计区间出现次数大于等于两次的数字个数,显然在线 i++ Max 数据 1619. [HEOI2012]采花 1619. [HEOI2012]采花 ★★☆ 输入文件:1flower.in 输出文件:1flower.out 简单对比 时间限制:5 s 内存限制:128 MB 【题目描述】 萧薰儿是古国的公主,平时的一大爱好是采花。 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花。花园足够大,容纳了 c语言 题型 COGS 1619. [HEOI2012]采花 ★★☆ 输入文件:1flower.in 输出文件:1flower.out 简单对比时间限制:5 s 内存限制:128 MB 【题目描述】 萧薰儿是古国的公主,平时的一大爱好是采花。 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花。花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示) 水题集合 cogs1619. [HEOI2012]采花 x 1619. [HEOI2012]采花 ★★☆ 输入文件:1flower.in 输出文件:1flower.out 简单对比时间限制:5 s 内存限制:128 MB 【题目描述】 萧薰儿是古国的公主,平时的一大爱好是采花。 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花。花园足够大,容纳了n #include i++ 数据 ios 树状数组 bzoj 2743: [HEOI2012]采花【树状数组】 离线,按照l排序 注意到在区间里出现两次的颜色才有贡献,所以记录一个ne[i]表示i后第一个和i同色的花,维护一个l,每次处理询问的时候l单调右移,树状数组维护,在ne[ne[i]]位置++,在ne[i]位置 (因为这里已经++过了),这样区间查询的时候如果右端点超过ne[ne[i]]就能对答案有贡 i++ #include ios 树状数组 区间查询 【BZOJ2743】[HEOI2012]采花 离线+树状数组 【BZOJ2743】[HEOI2012]采花 Description 萧芸斓是Z国的公主,平时的一大爱好是采花。 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花。花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于公主采花。公主每次采花后会统计采到的花的颜 BZOJ 树状数组 #include i++ 数据 bzoj2743[HEOI2012]采花 题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2743 和bzoj1878 HH的项链 一样的思路。一下想到只保留最靠右的两个值。所以把pre的pre删掉。 !仔细思考一下,发现每次加进去的是当前的pre。 #include i++ ios php i bzoj2743: [HEOI2012]采花 恩这题岂不是裸的莫队? 看下范围上西天。。。 其实和之前一道关于看电影的题很像这里就不赘述了。只不过这里用了树状数组。 #include i++ ios 树状数组 编程 [HEOI2012]采花 离线+树状数组 题目链接:C-[HEOI2012]采花_牛客竞赛数据结构专题班树状数组、线段树练习题 (nowcoder.com) 参考博客:题解 P4113 【[HEOI2012]采花】 - wangjyqh 的博客 - 洛谷博客 (luogu.com.cn) 受益良多。 原本我自己的写法是没有排序的,我定义了一 ... i++ #define #include c++ 时间复杂度 P4113 [HEOI2012]采花 树状数组 维护区间出现次数大于2的数的个数 显然可以用莫队来解 和之前那道hhh的项链一样 只不过那道是维护是维护出现一次的数的个数 和那道类似的做法 将询问按 l 排序 将每个出现两次的点维护到最右边即可 // luogu-judger-enable-o2 #include<bits/stdc++.h> u #define #include c++ i++ 【[HEOI2012]采花】 $HH$的项链加强版,数据范围和题意都加强了 题意大概:给出n个数,求区间出现次数 =2的数的个数。 一眼莫队,可是我还不会莫队啊 那就树状数组吧 回忆一下$HH$的项链,套路差不多,那道题我们维护的是每一种颜色最后出现的位置,因为根据其最后出现的位置我们就可以判断其是否在区间里 而判断这道题也很简 树状数组 i++ #include #define ios [HEOI 2012] 采花 [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2743 [算法] 首先预处理nxt[]数组 , 其中 , nxt[i]表示下一个和i号位颜色相同的位置 , 然后离线 , 将询问按左端点排序 , 每次将nxt[i]减一 , nxt[nx i++ git #include c++ 数组 题解 P4113【HEOi2012】采花 分析 考虑对每一种花,它在区间内能做贡献当且仅当区间内有两朵以上该种类的花,所以我们对每一个右端点,使它左侧每一种花的倒数第二个位置做贡献,这样能保证贡献被统计正确,避免选漏,然后就转化为前缀问题,用树状数组 \(logn\) 即可解决,然后将询问按右端点排序,每次右移时将它前面同类型的贡献加一,前 ... i++ #include c++ 树状数组 其他 java的年轻和老年代 JVM(Java虚拟机)的堆内存分为新生代(Young Generation)和老年代(Old Generation)。新生代是指存放新创建的对象的内存区域,而老年代是指存放已经存活一段时间的对象的内存区域。 新生代与老年代的比例可以通过参数来配置,一般使用-XX:NewRatio参数来设置。该参数的值表示老年代与新生代的比例,例如-XX:NewRatio=2表示新生代和老年代的比例为1:2。 新 java的年轻和老年代 jvm 老年代 JVM 垃圾回收 airtest windows 下打开一个程序 一个表格上有许多列,双击每一列,打开一个窗口显示明细。但是关闭这个窗口之后,再想打开这个窗口,怎么点都没有反应。在代码里面加alert,发现第二次打开时,执行到open时,直接就跳过去了。然后在网上一查,才知道window.open()不能重复打开同一个名字的窗口。比如window.open(url1,"aaa"),打开一个窗口,关闭后再打开,是失效的。就是因为每一次名字都是aaa。但是这么多列怎 JavaScript 新窗口 字符串 随机数 java给字段依据某个字段的值赋默认值的注解 1.什么是变量?就是可变的量变量的定义格式?数据类型 变量名 = 数值;int a = 100;要使用变量需要注意什么?同一范围内不能重复定义、不赋值不能使用2.Java中的数据类型分几类?基本数据类型有哪些?两大类基本数据类型:byte(1) short(2) int(4) long(8) float(4) double(6)char(2) boolean(1)引用数据类型:类 接口 数组 枚举 数据类型 赋值 System java Runtime如何保证命令执行完成 1.System类与Runtime类1.1System类System类对我们来说并不陌生,在之前学习的知识中,当我们需要打印结果时,使用的都是"System.out.println()"语句进行打印输出,这句代码中就使用了System类。这个类中定义了与系统相关的属性和方法,它所提供的属性和方法都是静态的,因此,想要引用这些属性和方法,直接使用System类调用即可。下表是System类常用的一些 runtime 运维 操作系统 System 数组 Wsl docker 目录权限 在Windows系统上使用WSL和Docker 文章目录在Windows系统上使用WSL和DockerWindows的Linux子系统(WSL)WSL安装教程在WSL上运行Linux GUI应用Docker的使用Docker的安装Docker创建Linux容器参考&其他WSL怎么更新su: Authentication failure问题docker常用指令镜像相关容器相关网络相关数据卷相 Wsl docker 目录权限 windows docker linux Docker