原题:传送门

code:

  1. //By Menteur_Hxy
  2. #include<cstdio>
  3. #include<iostream>
  4. #include<algorithm>
  5. #include<cstring>
  6. #include<vector>
  7. #include<cmath>
  8. #define ll long long
  9. #define f(a,b,c) for(int a=b;a<=c;a++)
  10. using namespace std;
  11. inline ll rd() {
  12. ll x=0,fla=1; char c=' ';
  13. while(c>'9' || c<'0') {if(c=='-') fla=-fla; c=getchar();}
  14. while(c<='9'&&c>='0') x=x*10+c-'0',c=getchar();
  15. return x*fla;
  16. }
  17. inline void out(ll x){
  18. int a[25],wei=0;
  19. if(x<0) putchar('-'),x=-x;
  20. for(;x;x/=10) a[++wei]=x%10;
  21. if(wei==0){ puts("0"); return;}
  22. for(int j=wei;j>=1;--j) putchar('0'+a[j]);
  23. putchar('\n');
  24. }
  25. const int MAX=100010;
  26. const int INF=0x3f3f3f3f;
  27. int n,top,blo,blo2;
  28. int v[MAX],bo[MAX<<1];
  29. vector <int> ve[1005];
  30. int query(int& a) {
  31. int x=1;
  32. for(;a>ve[x].size();a-=ve[x].size(),x++);
  33. return x;
  34. }
  35. void rebuild() {
  36. top=0;
  37. for(int i=1;!ve[i].empty();i++) {
  38. for(vector <int>::iterator j=ve[i].begin();j!=ve[i].end();j++)
  39. bo[++top]=*j;
  40. ve[i].clear();
  41. }
  42. blo2=sqrt(top);
  43. f(i,1,top) ve[(i-1)/blo2+1].push_back(bo[i]);
  44. }
  45. void insrt(int a,int b) {
  46. int bl=query(a);
  47. ve[bl].insert(ve[bl].begin()+a-1,b);
  48. if(ve[bl].size()>20*blo) rebuild();//这里判断的blo不能用新的blo否则无意义!!!!
  49. }
  50. int main() {
  51. n=rd(); blo=sqrt(n);
  52. f(i,1,n) v[i]=rd();
  53. f(i,1,n) ve[(i-1)/blo+1].push_back(v[i]);
  54. f(i,1,n) {
  55. int opt=rd(),l=rd(),r=rd(),c=rd();
  56. if(opt) {
  57. int bl=query(r);
  58. out(ve[bl][r-1]);
  59. // out(ve[query(r)][r-1]); 这样写会出现玄学错误QAQ
  60. }
  61. else insrt(l,r);
  62. }
  63. return 0;
  64. }

[Libre 6282] 数列分块入门 6 (分块)的更多相关文章

  1. [Libre 6281] 数列分块入门 5 (分块)

    水一道入门分块qwq 题面:传送门 开方基本暴力.. 如果某一个区间全部都开成1或0就打上标记全部跳过就行了 因为一个数开上个四五六次就是1了所以复杂度能过233~ code: //By Menteu ...

  2. LibreOJ 6277 数列分块入门 1(分块)

    题解:感谢hzwer学长和loj让本蒟蒻能够找到如此合适的入门题做. 这是一道非常标准的分块模板题,本来用打标记的线段树不知道要写多少行,但是分块只有这么几行,极其高妙. 代码如下: #include ...

  3. LibreOJ 6280 数列分块入门 4(分块区间加区间求和)

    题解:分块的区间求和比起线段树来说实在是太好写了(当然,复杂度也高)但这也是没办法的事情嘛.总之50000的数据跑了75ms左右还是挺优越的. 比起单点询问来说,区间询问和也没有复杂多少,多开一个su ...

  4. LibreOJ 6278 数列分块入门 2(分块)

     题解:非常高妙的分块,每个块对应一个桶,桶内元素全部sort过,加值时,对于零散块O(sqrt(n))暴力修改,然后暴力重构桶.对于大块直接整块加.查询时对于非完整块O(sqrt(n))暴力遍历.对 ...

  5. LOJ.6284.数列分块入门8(分块)

    题目链接 \(Description\) 给出一个长为n的数列,以及n个操作,操作涉及区间询问等于一个数c的元素,并将这个区间的所有元素改为c. \(Solution\) 模拟一些数据可以发现,询问后 ...

  6. LOJ.6281.数列分块入门5(分块 区间开方)

    题目链接 int内的数(也不非得是int)最多开方4.5次就变成1了,所以还不是1就暴力,是1就直接跳过. #include <cmath> #include <cstdio> ...

  7. LibreOJ 6281 数列分块入门 5(分块区间开方区间求和)

    题解:区间开方emmm,这马上让我想起了当时写线段树的时候,很显然,对于一个在2^31次方以内的数,开方7-8次就差不多变成一了,所以我们对于每次开方,如果块中的所有数都为一了,那么开方也没有必要了. ...

  8. LibreOJ 6279 数列分块入门 3(分块+排序)

    题解:自然是先分一波块,把同一个块中的所有数字压到一个vector中,将每一个vector进行排序.然后对于每一次区间加,不完整的块加好后暴力重构,完整的块直接修改标记.查询时不完整的块暴力找最接近x ...

  9. LOJ-6279-数列分块入门3(分块, 二分)

    链接: https://loj.ac/problem/6279 题意: 给出一个长为 的数列,以及 个操作,操作涉及区间加法,询问区间内小于某个值 的前驱(比其小的最大元素). 思路: 同样的分块加二 ...

随机推荐

  1. poj2299--归并排序求逆序数

    /** \brief poj2299  *  * \param date 2014/8/5  * \param state AC  * \return memory 4640K time 3250ms ...

  2. Jemeter第一个实例

    http://www.jianshu.com/p/0e4daecc8122?from=timeline&isappinstalled=0 学习地址:http://leafwf.blog.51c ...

  3. iOS开发之获取沙盒路径

    iOS开发之沙盒机制(SandBox)具体解说了沙盒的一些机制.在开发中,我们须要对沙盒进行操作.所以我们须要获取到沙盒路径. 沙盒里的目录包含Documents.Library.tmp.这三个目录的 ...

  4. luogu1955 [NOI2015] 程序自动分析

    题目大意 假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量相等/不等的约束条件,请判定是否可以分别为每一个变量赋予恰当的值,使得上述所有约束条件同时被满足.i, ...

  5. 解决xftp失去链接需要重新链接问题。

    XFTP 失去连接需要重新连接 打开 Xftp 主程序. 在顶部菜单[文件] – [属性], 打开[默认会话属性]窗口,点击[选项],在连接部分选择勾选"发送保持活动状态消息(s)" ...

  6. 国外物联网平台初探(五) ——Exosite Murano

    定位 Murano是一个基于云的IoT软件平台,提供安全.可扩展的基础设施,支持端到端的生态系统,帮助客户安全.可扩展地开发.部署和管理应用.服务以及联网产品. 功能 Murano平台简化了整个IoT ...

  7. nyoj--523--亡命逃窜(BFS水题)

    亡命逃窜 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 从前有个叫hck的骑士,为了救我们美丽的公主,潜入魔王的老巢,够英雄吧.不过英雄不是这么好当的.这个可怜的娃被魔 ...

  8. B1965 [Ahoi2005]SHUFFLE 洗牌 数论

    这个题的规律很好找,就是奇数直接除二,偶数除二加n/2.把这个规律整理一下就是(x * 2) % (n + 1),然后就直接求逆元就行了.一直30分的原因是qpow函数传参的时候用的int,然而变量是 ...

  9. CTF-Mayday

    打开下载的Mayday.txt文件: 温柔 知足突然好想你  拥抱突然好想你  拥抱温柔 知足温柔 知足突然好想你  拥抱突然好想你  拥抱温柔 知足温柔 知足突然好想你  拥抱突然好想你  拥抱温柔 ...

  10. 一步步教会你微信小程序的登录鉴权

    前言 为了方便小程序应用使用微信登录态进行授权登录,微信小程序提供了登录授权的开放接口.乍一看文档,感觉文档上讲的非常有道理,但是实现起来又真的是摸不着头脑,不知道如何管理和维护登录态.本文就来手把手 ...