「分块系列」公主的朋友 解题报告
公主的朋友
Description
Problem
由于\(Wulala\)在上个问题中的精彩表现,公主认为\(Wulala\)是一个很棒的人,就把\(Wulala\)留在 了\(X\)国。这时正好公主的一位传教士朋友来拜访公主,于是想找\(wulala\)帮忙。
\(X\)国如同一条直线,其中有\(n\)个城市,从东向西分别编号为\(1\)到\(n\)。而他的国家中有\(m\)种宗教, 每个城市一定会有一种信仰的宗教。 有时候有些城市为了获得更多的认可,会派出信仰本城市宗教的传教士前往其他国家。
\(X\)国的传教士都十分厉害,只要是他途经的地方都会改信他所传播的宗教。 传教士们在路上碰到自己宗教的城市自然就不用传教了,所以每 一个传教士在旅行前都会计算自己可以在多少城市停下来(不包括起始的城市)。
而传教士们都是文科僧,数学是很差的,所以他希望\(Wulala\)能帮他计算。可\(Wulala\)数学也不好,但他又不想在公主面前丢脸,你能帮帮他吗?
Input Data
第一行两个整数\(n\),\(m\);
第二行\(n\)个整数第\(i\)个整数代表第ii个城市信仰的宗教;
第三行一个整数 \(T\) 代表传教士的个数;
接下来 \(T\) 行每行两个整数 \(x\),\(y\)代表 \(x\) 城向 \(y\) 城派遣了一个传教士(保证 \(x<y\))
Output Data
输出\(T\)行,第\(i\)行代表第\(i\)个传教士询问的答案
Input / Output Sample
2 2
1 2
2
1 2
1 2
0
1
Data Limit
对于 30%的数据 \(n \le 100000, m \le 10, T \le100\);
对于 60%的数据 \(n \le 100000, m \le 10, T \le 100000\);
对于 100%的数据 \(n \le 100000, m \le 300, T \le 100000\)。
Problem Source
湖南师大附中模拟赛
这又和\(数列分块入门8\)蜜汁相似QAQ
\(^双_经\) $^倍_验 $泛滥成灾啊
这里也不多提,参照\(数列分块入门8\)
代码
#include<bits/stdc++.h>
using namespace std;
#define MAXN 100005int n, m, d, T;
int a[MAXN], b[MAXN], f[500];
bool v[500];int FF( int x ){return v[b[x]] ? f[b[x]] : a[x];
}int fun( int l, int r, int c ){int ans(0);for ( int i = l; i <= r && i <= n; ++i ) ans += FF(i) == c, a[i] = c;return ans;
}int Get( int l, int r, int c ){int ans(0);if ( b[l] == b[r] ){if ( v[b[l]] && f[b[l]] == c ) return r - l + 1;if ( v[b[l]] ){fun( ( b[l] - 1 ) * d + 1, l - 1, f[b[l]] );fun( r + 1, b[l] * d, f[b[l]] );}ans = fun( l, r, c );v[b[l]] = 0;return ans;}if ( v[b[l]] ) fun( ( b[l] - 1 ) * d + 1, l - 1, f[b[l]] );ans += fun( l, b[l] * d, c );v[b[l]] = 0;if ( v[b[r]] ) fun( r + 1, min( b[r] * d, n ), f[b[r]] );ans += fun( ( b[r] - 1 ) * d + 1, r, c );v[b[r]] = 0;for ( int i = b[l] + 1; i <= b[r] - 1; ++i ){if ( !v[i] ){for ( int j = ( i - 1 ) * d + 1; b[j] == i; ++j ) ans += a[j] == c, a[j] = c;v[i] = 1; f[i] = c;} else{if ( f[i] == c ) ans += d;else f[i] = c;}}return ans;
}int main(){scanf( "%d%d", &n, &m );d = (int)sqrt(n);for ( int i = 1; i <= n; ++i ){scanf( "%d", &a[i] );b[i] = ( i - 1 ) / d + 1;}scanf( "%d", &T );while ( T-- ){int l, r;scanf( "%d%d", &l ,&r );printf( "%d\n", Get( l, r, FF(l) ) - 1 );}return 0;
}
数列分块系列目录
数列分块入门1
数列分块入门2
数列分块入门3
数列分块入门4
数列分块入门5
数列分块入门6
数列分块入门7
数列分块入门8
数列分块入门9
蒲公英
公主的朋友 <-
转载于:https://www.cnblogs.com/louhancheng/p/10051228.html
「分块系列」公主的朋友 解题报告相关推荐
- 「分块系列」数列分块入门3 解题报告
数列分块入门3 题意概括 区间加法,区间求前驱. 写在前面 这题的方法与分块2方法极其类似,建议自行解决. 正题 和上一题类似,但是二分不是用来计数的,而是用来求小于c的最大值的.然后对于不完整快,将 ...
- 「CTS2019 | CTSC2019」氪金手游 解题报告
「CTS2019 | CTSC2019」氪金手游 降 智 好 题 ... 考场上签到失败了,没想容斥就只打了20分暴力... 考虑一个事情,你抽中一个度为0的点,相当于把这个点删掉了(当然你也只能抽中 ...
- java8 lambda maplist排序_「java8系列」流式编程Stream
前言 「Java8系列」神秘的Lambda 「Java8系列」神奇的函数式接口 继上两篇之后,本文已经java8系列的第三篇了.本篇文章比较长,但我希望大家都能认真读完.读不完可以先收藏,在找时间读. ...
- 「Hudi系列」Hudi查询写入常见问题汇总
点击上方蓝色字体,选择"设为星标" 回复"面试"获取更多惊喜 八股文教给我,你们专心刷题和面试 阅读本文前必读: 1. 「Apache Hudi系列」核心概念与 ...
- android 微信朋友圈图文编辑器,做朋友圈的「集赞机」:微信朋友圈生存手册 Android 篇...
一年几度的「朋友圈杯旅游.美食.自拍大赛」已接近尾声,这一次你有没有再创佳绩呢?作为一项我国人们「喜闻乐见」的装逼活动,朋友圈状态已经成了判定一个人逼格的重要依据,然而根据我多年的研(zhuang)究 ...
- java8堆内存模型_「GC系列」JVM堆内存分代模型及常见的垃圾回收器
1. 内存分代模型 为什么要说JVM的内存分代模型呢,因为内存分代和垃圾回收器的运行是有关系的. 现在大部分用到的垃圾回收器在逻辑上是分代的,除了G1之外的其他垃圾回收器在逻辑上和物理上都是分代的. ...
- hdu 2049 不容易系列之(4)——考新郎 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2049 写这篇解题报告时 我真的很气愤 对自己又一次犯下低级错误改了两个小时 int型的数据居然用%I6 ...
- 「NOI2016」循环之美 解题报告
「NOI2016」循环之美 对于小数\(\frac{a}{b}\),如果它在\(k\)进制下被统计,需要满足要求并且不重复. 不重复我们确保这个分数是最简分数即\((a,b)=1\) 满足要求需要满足 ...
- dispatch作用 react_「React系列」手把手带你撸后台系统(Redux与路由鉴权)
[React系列]手把手带你撸后台系统(Redux与路由鉴权) 来源:https://juejin.im/post/5d9b5ddee51d45781b63b8f7 上一篇我们介绍了系统架构,这一篇将 ...
最新文章
- msicuu.exe (msizap.exe),程序的作用
- 空间谱专题11:子阵平滑与秩亏缺
- android外置sd大小,android 读取外置和内置存储卡路径和大小
- 波士顿动力放出新视频:谁都挡不住机器狗开你的门
- imap服务器appleimap.163.com没有响应,163smtp
- bdf比特数字基金_第四届世界数字经济大会,比特元BTY作为协办方参与
- 测试AS3的性能9800粒子
- [Android]Log打印
- 游戏素材网站推荐!!!
- 徐思201771010132《面向对象程序设计(java)》第十周学习总结
- 中文论文检索证明怎么开_论文检索证明在哪里弄
- Java小白 学习笔记(三)——面向对象
- Spring -> Spring中Bean是线程安全的吗
- Mybatis - <choose> 标签的用法
- 什么是运算计算机科学的基础概念,【软件设计师】笔记一:计算机科学基础知识...
- 正则表达式:邮箱匹配
- https 被redirect成了http
- 如何获取屏幕DPI/PPI并计算A4纸在屏幕的大小
- IP数据报中如果不分片,分片标志值是什么?
- 【Kotlin】Android-使用WebDAV协议云存储文件(详细)—附demo源码
热门文章
- startActivityForResult方法过时
- burnintest linux,BURNINTEST-FOR-LINUX-CLI
- centos web 访问mysql_centos7 ---搭建mysql主从并用zabbix监控主从状态web实现报警(
- 关于Linux虚拟机联网问题
- react 打包遇到的问题记录
- Python数据分析——Matplotlib数据可视化基础(二)
- 今夜では一人で雛祭り 001
- 125l放射性同位素标记药物小分子/生物蛋白/抗体/多肽/纳米颗粒材料的应用
- Codeforces Round #801 (Div. 2)A~C
- QFP PQFP LQFP TQFP封装形式及PCB详解