题意和链接前面的blog有,就不再提。。

思路:本来实在是莽不过去。。后来想到其实复杂度均摊下来每块取比sqrt(n)大一些更好。。具体大多少。。嗯。。大概x^2/logx=N  。?我也不会解。。。

所以n取了个2*sqrt(n)结果卡过去了。。。重要的还是思想。。分块后每块排序,和3333套路差不多,时间复杂度O(n*sqrt(n)*log(n))复杂度一看就不小。。不过编码很简单暴力。。毕竟数据结构实在写不了也可以莽一下嘛。。。

代码:

#include<bits/stdc++.h>using namespace std;
const int MAXN = 200010;
int n,q,block,num;
int a[MAXN];
int belong[MAXN],L[MAXN],R[MAXN],c[MAXN],d[MAXN],mp[MAXN],tmp[MAXN];int build(int n){block=sqrt(n)*2;num=n/block;if(n%block!=0) num++;for(int i=0;i<num;i++){L[i]=i*block+1;R[i]=(i+1)*block;}R[num-1]=n;int cnt=0;for(int i=1;i<=n;i++){if(i<=R[cnt]) belong[i]=cnt;else belong[i]=++cnt;}memset(mp,0,sizeof(mp));for(int i = 1; i<= n; i++){c[i]=mp[a[i]];mp[a[i]] = i;}for(int i=1;i<=n;i++) d[i]=c[i];for(int i=0;i<num;i++){sort(c+L[i],c+R[i]+1);}
}int query(int l,int r){int ret=0;if(belong[l]==belong[r]){for(int i=l;i<=r;i++){if(d[i]<l) ++ret;}int x=(ret+1)/2;ret=0;for(int i=l;i<=r;i++){if(d[i]<l) ++ret;if(ret==x) return i;}}for(int i=l;i<=R[belong[l]];i++){if(d[i]<l) ++ret;}for(int i=belong[l]+1;i<belong[r];i++){tmp[i]=(int)(lower_bound(c+L[i],c+R[i]+1,l)-c)-L[i];ret+=tmp[i];}for(int i=L[belong[r]];i<=r;i++){if(d[i]<l) ++ret;}int x=(ret+1)/2;ret=0;for(int i=l;i<=R[belong[l]];i++){if(d[i]<l) ++ret;if(ret==x) return i;}for(int i=belong[l]+1;i<belong[r];i++){int tm=ret;ret+=tmp[i];if(ret>=x){for(int j=L[i];j<=R[i];j++){if(d[j]<l) ++tm;if(tm==x) return j;}}}for(int i=L[belong[r]];i<=r;i++){if(d[i]<l) ++ret;if(ret==x) return i;}
}int Q[MAXN];int main(){Q[0]=0;int t,cas=1;scanf("%d",&t);while(t--){scanf("%d%d",&n,&q);for(int i = 1; i <= n; i++) scanf("%d",&a[i]);build(n);int l,r;for(int i=1;i<=q;i++){scanf("%d%d",&l,&r);l=(l+Q[i-1])%n+1;r=(r+Q[i-1])%n+1;if(r<l) swap(l,r);Q[i]=query(l,r);}printf("Case #%d:",cas++);for(int i=1;i<=q;i++) printf(" %d",Q[i]);printf("\n");}return 0;
}

转载于:https://www.cnblogs.com/zhangxianlong/p/10672532.html

HDU 5919 分块做法相关推荐

  1. HDU 4467 分块

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4467 题意:给定n个点m条边的无向图,点被染色(黑0/白1),边带边权.然后q个询问.询问分为两种: ...

  2. HDU - 5919 Sequence II——主席树+区间种类++逆序建树

    [题目描述] HDU - 5919 Sequence II [题目分析] 题目给定一个数组,每次查询一个区间,找出区间内不同数字的个数x,然后输出按出现顺序第x/2向上取整个数字的位置. 按照要求,我 ...

  3. HDU 2920 分块底数优化 暴力

    其实和昨天写的那道水题是一样的,注意爆LL $1<=n,k<=1e9$,$\sum\limits_{i=1}^{n}(k \mod i) = nk - \sum\limits_{i=1}^ ...

  4. hdu 1754 I Hate It(分块做法)

    题意:中文题,不多解释 思路:这个题原本用线段树很容易做,但分块其实也很容易,对于分块的复杂度还不是很会计算,只知道是每次分为sqrt(n)块,然后一共有sqrt(n)块,其他地方直接暴力,这应该是h ...

  5. POJ2104 K-th Number [分块做法]

    传送:主席树做法http://www.cnblogs.com/candy99/p/6160704.html 做那倒带修改的主席树时就发现分块可以做,然后就试了试 思想和教主的魔法差不多,只不过那个是求 ...

  6. HDU 5919 Sequence II 主席树

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5919 Sequence II Time Limit: 9000/4500 MS (Java/Othe ...

  7. luo3372线段树模板的分块做法

    题目大意 请你维护一个有n个元素的整数序列,要求支持区间查询&区间修改 对于100%的数据,\(1<=n<=10^5\) 分析 正常做法是线段树维护区间修改.区间查询,今天我要讲的 ...

  8. B - Paint The Wall HDU - 4391[分块hash+tag标记]

    题目大意:就是有两个第一个操作你可以修改[l,r]区间内的所有数称为z,第二个操作是问你[l,r]区间内z的个数是多少 解法1:分块 由于这里涉及到了区间修改那么我们要借助线段树的Tag的思想,对于没 ...

  9. HDU - 5919 Sequence II(主席树+思维)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数列 a ,再给出 m 次询问,每次询问给出一个区间 [ l , r ] ,问区间 [ l , r ] 内首次出现的数字的位置的中位数 题目分析:题 ...

最新文章

  1. 华为s8600手机驱动_只有手机才能快充?华为MateBook X的灵巧快充解放你的续航焦虑-华为 ——快科技(驱动之家旗下媒体)-...
  2. 前端学习(2975):路由传参的两种方式
  3. python counter模块_python collections模块 计数器(counter)
  4. java中的函数指的是,函数式接口在Java中是指有且仅有一个抽象方法的接口。( )...
  5. minSdkVersion、maxSdkVersion、targetSdkVersion、target释义
  6. java反编译jar包并修改class文件重新打包
  7. 一个码砖的码农,在CSDN写一年博客,出书了?
  8. python chmod_使Python脚本可执行chmod755?
  9. windows系统常见端口和木马默认使用端口
  10. 网络游戏外挂制作(3)
  11. iOS开发 ----- 加载动画之牛顿摆的实现
  12. 老照片瞬间修复神器!快帮你家的长辈恢复照片去吧
  13. JSON数据结构(A、快速入门篇)(Yanlz+Data+JsonArray+JsonObject+JsonValue+JsonMapper.ToJson+JsonMapper.ToObject+)
  14. 【计算机网络】负载均衡
  15. 编辑python用什么输入法_微信Python输入法, 两个地球首发!
  16. Java的字节流和字符流
  17. 我的新书 asp net开发技巧精讲
  18. 驱动开发:运用VAD隐藏R3内存思路
  19. 最新总结Spring知识及常见面试题
  20. Git git config 配置使用

热门文章

  1. 最大子数组 ——算法导论
  2. nginx轻松搭建自己的flv流媒体服务器
  3. ECCV 2020 论文大盘点-人员重识别(ReID)篇
  4. 送10本今年最火的《动手学深度学习》
  5. StegaStamp:加州大学伯克利分校开源神奇的照片隐写术,打印的照片能当二维码用...
  6. 你可能不知道的10个Python Pandas的技巧和特性
  7. 连续七天熬夜3D建模师终于出手,让老板增加薪资待遇,分享使用3D建模软件的6个行业
  8. 3A公司年薪30万建模师总结:怎么做才能学好3D建模?
  9. 【Matplotlib】【Python】如何使用matplotlib颜色映射
  10. 英伟达3080Ti、3070Ti来了!