【BZOJ 2724】 2724: [Violet 6]蒲公英 (区间众数不带修改版本)
2724: [Violet 6]蒲公英
Time Limit: 40 Sec Memory Limit: 512 MB
Submit: 1908 Solved: 678Description
Input
修正一下
l = (l_0 + x - 1) mod n + 1, r = (r_0 + x - 1) mod n + 1
Output
Sample Input
6 3
1 2 3 2 1 2
1 5
3 6
1 5Sample Output
1
2
1HINT
修正下:
n <= 40000, m <= 50000
Source
【分析】
区间众数见:http://www.docin.com/p-679227660.html



我这道题的就是打这个做法【实际上是膜hzwer的代码
【关于[l,r]之间有多少个x,是把位置存在数值的vector里面,然后lower_bound(l)~upper_bound(r)有多少个数
然后分块一下就好了。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
using namespace std;
#define Maxn 50010
#define Maxm 510 int a[Maxn],f[Maxn],bl[Maxn],mode[Maxm][Maxm];
map<int,int> mp;int id;
vector<int > v[Maxn]; int blo,n;
int cnt[Maxn];
void pre(int x)
{
memset(cnt,,sizeof(cnt));
int mx=,ans=;
for(int i=(x-)*blo+;i<=n;i++)
{
cnt[a[i]]++;
int t=bl[i];
if(cnt[a[i]]>mx||(cnt[a[i]]==mx&&f[a[i]]<f[ans]))
ans=a[i],mx=cnt[a[i]];
mode[x][t]=ans;
}
} int get_(int l,int r,int x)
{
return upper_bound(v[x].begin(),v[x].end(),r)-lower_bound(v[x].begin(),v[x].end(),l);
} int query(int l,int r)
{
int ans,mx=;
if(bl[l]==bl[r])
{
for(int i=l;i<=r;i++)
{
int t=get_(l,r,a[i]);
if(t>mx||(t==mx)&&f[a[i]]<f[ans]) ans=a[i],mx=t;
}
}
else
{
ans=mode[bl[l]+][bl[r]-],mx=get_(l,r,ans);
for(int i=l;i<=bl[l]*blo;i++)
{
int t=get_(l,r,a[i]);
if(t>mx||(t==mx)&&f[a[i]]<f[ans]) ans=a[i],mx=t;
}
for(int i=(bl[r]-)*blo+;i<=r;i++)
{
int t=get_(l,r,a[i]);
if(t>mx||(t==mx&&f[a[i]]<f[ans])) ans=a[i],mx=t;
}
}
return ans;
} int main()
{
int m;
scanf("%d%d",&n,&m);
blo=;
int ans=;id=;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
if(!mp[a[i]]) mp[a[i]]=++id,f[id]=a[i];
a[i]=mp[a[i]];
v[a[i]].push_back(i);
}
for(int i=;i<=n;i++) bl[i]=(i-)/blo+;
for(int i=;i<=bl[n];i++) pre(i);
for(int i=;i<=m;i++)
{
int l,r;
scanf("%d%d",&l,&r);
l=(l+ans-)%n+,r=(r+ans-)%n+;
if(l>r) swap(l,r);
ans=f[query(l,r)];
printf("%d\n",ans);
}
return ;
}
【不行了 我也用map了。。。。
然后其实有更快的方法,然后我尝试了一下就放弃了。。【感觉是用空间和代码量换时间啊好恶心、、


然后带修改这样【其实我没看。。

2017-04-23 21:21:48
【BZOJ 2724】 2724: [Violet 6]蒲公英 (区间众数不带修改版本)的更多相关文章
- BZOJ 1901: Zju2112 Dynamic Rankings 区间k大 带修改 在线 线段树套平衡树
之前写线段树套splay数组版..写了6.2k..然后弃疗了.现在发现还是很水的..嘎嘎.. zju过不了,超时. upd:才发现zju是多组数据..TLE一版才发现.然后改了,MLE...手写内存池 ...
- P4168 [Violet]蒲公英 区间众数
$ \color{#0066ff}{ 题目描述 }$ 在乡下的小路旁种着许多蒲公英,而我们的问题正是与这些蒲公英有关. 为了简化起见,我们把所有的蒲公英看成一个长度为n的序列 \((a_1,a_2.. ...
- 洛谷 P1903 BZOJ 2120 清橙 A1274【模板】分块/带修改莫队(数颜色)(周奕超)
试题来源 2011中国国家集训队命题答辩 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔 ...
- bzoj 5028: 小Z的加油店——带修改的区间gcd
Description 小Z经营一家加油店.小Z加油的方式非常奇怪.他有一排瓶子,每个瓶子有一个容量vi.每次别人来加油,他会让 别人选连续一段的瓶子.他可以用这些瓶子装汽油,但他只有三种操作: 1. ...
- BZOJ 1146: [CTSC2008]网络管理Network 带修改主席树_树套树_DFS序
Description M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个 部门之间协同工作,公司搭建了一个连接整个公司的通信网络.该网络的结构由N个路 ...
- BZOJ 2724: [Violet 6]蒲公英
2724: [Violet 6]蒲公英 Time Limit: 40 Sec Memory Limit: 512 MBSubmit: 1633 Solved: 563[Submit][Status ...
- BZOJ 2724: [Violet 6]蒲公英( 分块 )
虽然AC了但是时间惨不忍睹...不科学....怎么会那么慢呢... 无修改的区间众数..分块, 预处理出Mode[i][j]表示第i块到第j块的众数, sum[i][j]表示前i块j出现次数(前缀和, ...
- 【BZOJ】2724: [Violet 6]蒲公英
2724: [Violet 6]蒲公英 Time Limit: 40 Sec Memory Limit: 512 MBSubmit: 2900 Solved: 1031[Submit][Statu ...
- BZOJ.2724.[Violet 6]蒲公英(静态分块)
题目链接 区间众数 强制在线 考虑什么样的数会成为众数 如果一个区间S1的众数为x,那么S1与新区间S2的并的众数只会是x或S2中的数 所以我们可以分块先预处理f[i][j]表示第i到第j块的众数 对 ...
随机推荐
- POJ3233_Matrix Power Series_矩阵幂_C++
题目:http://poj.org/problem?id=3233 这是今天考试的题目,结果没想出来写了个暴力30分,看完题解之后觉得自己是SB 首先暴力就是一个个乘然后相加,时间是O(kn3),极限 ...
- php中各种hash算法的执行速度比较
更多内容推荐微信公众号,欢迎关注: PHP中的Hash函数很多,像MD4.MD5.SHA-1.SHA-256.SHA-384.SHA-512等我们比较常见,那么各个哈希的执行速度呢? $algos = ...
- log4net记录系统错误日志到文本文件用法详解
log4net是一个完全免费开源的插件,可以去官网下载源码. 一般系统操作日志不会用log4net,自己写代码存入数据库更方便合理,但是系统部署后运行在客户环境,难免会发生系统bug.崩溃.断网等无法 ...
- 差分约束系统+(矩阵)思维(H - THE MATRIX PROBLEM HDU - 3666 )
题目链接:https://cn.vjudge.net/contest/276233#problem/H 题目大意:对于给定的矩阵 每一行除以ai 每一列除以bi 之后 数组的所有元素都还在那个L- ...
- 2016.08.02 math(leetcode) 小结
math(leetcode) 小结 在leetcode中有些知识点(套路) 判断一个数是不是能被某些数整除,可以用 n%x == 0,循环除的话,就将while(n%x == 0)的循环条件设置判断整 ...
- bzoj 3236: 洛谷 P4396: [AHOI2013]作业 (莫队, 分块)
题目传送门:洛谷P4396. 题意简述: 给定一个长度为\(n\)的数列.有\(m\)次询问,每次询问区间\([l,r]\)中数值在\([a,b]\)之间的数的个数,和数值在\([a,b]\)之间的不 ...
- 理解mipi协议【转】
转自:http://blog.csdn.net/wanglining1987/article/details/50202615 完成mipi信号通道分配后,需要生成与物理层对接的时序.同步信号: MI ...
- poj1102
模拟 #include <iostream> #include <string> using namespace std; ][][] = { { ' ', '-', ' ', ...
- python网络编程--线程递归锁RLock
一:死锁 所谓死锁:是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进 ...
- tf.sequence_mask
tf.sequence_mask >>> x=[1,2,3]>>> z=tf.sequence_mask(x)>>> sess.run(z)arr ...
.gif)
.gif)
.gif)
.gif)