两个锅

一个是sametag[i]==c

另一个是a[j]不要写成a[i]

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int belong[100100],sametag[100100],n,a[100100],sz,blocknum;
void calbe(int n){
for(int i=1;i<=n;i++)
belong[i]=(i-1)/sz+1;
}
void check(int x){
int f=true,num=a[sz*(x-1)+1];
for(int i=sz*(x-1)+1;i<=min(sz*x,n);i++)
f&=(num==a[i]);
if(f)
sametag[x]=num;
else
sametag[x]=-1;
}
void pushdown(int x){
if(sametag[x]!=-1){
for(int i=sz*(x-1)+1;i<=min(sz*x,n);i++)
a[i]=sametag[x];
}
}
int query(int l,int r,int c){
int ans=0;
int lsx=belong[l];
int rex=belong[r];
pushdown(lsx);
for(int i=l;i<=min(lsx*sz,r);i++)
ans+=(a[i]==c);
if(lsx!=rex){
pushdown(rex);
for(int i=(rex-1)*sz+1;i<=r;i++)
ans+=(a[i]==c);
for(int i=lsx+1;i<=rex-1;i++)
if(sametag[i]!=-1&&sametag[i]==c)
ans+=sz;
else if(sametag[i]==-1)
for(int j=(i-1)*sz+1;j<=i*sz;j++)
ans+=(a[j]==c);
}
return ans;
}
void update(int l,int r,int c){
int lsx=belong[l];
int rex=belong[r];
pushdown(lsx);
sametag[lsx]=-1;
for(int i=l;i<=min(lsx*sz,r);i++)
a[i]=c;
check(lsx);
if(lsx!=rex){
pushdown(rex);
sametag[rex]=-1;
for(int i=(rex-1)*sz+1;i<=r;i++)
a[i]=c;
check(rex);
for(int i=lsx+1;i<=rex-1;i++)
sametag[i]=c;
}
}
int main(){
// freopen("a1.in","r",stdin);
// freopen("test.out","w",stdout);
scanf("%lld",&n);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
sz=sqrt(n);
blocknum=n/sz;
if(n%sz)
blocknum++;
calbe(n);
for(int i=1;i<=blocknum;i++)
check(i);
for(int i=1;i<=n;i++){
int l,r,c;
scanf("%d %d %d",&l,&r,&c);
printf("%d\n",query(l,r,c));
update(l,r,c);
}
return 0;
}

LOJ6284 数列分块入门8(分块)的更多相关文章

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

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

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

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

  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. [Libre 6282] 数列分块入门 6 (分块)

    原题:传送门 code: //By Menteur_Hxy #include<cstdio> #include<iostream> #include<algorithm& ...

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

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

随机推荐

  1. hdu5302 构造

    题意:给你一个无向图,它的边要么是黑色要么是白色,且图上的每个点最多与两个黑边两个白边相连.现在,Demon将图分成两部分,一部分包含所有的黑边,另一部分包括所有的白边,给你白边图中度为0的点的数量w ...

  2. python 创建二维数组的方法

    废话不多说,直接上代码: #coding=utf-8 def two_di_demo1(): a=[] for i in range(10): a.append([]) for j in range( ...

  3. Git相关整理以及学习

    1.取消还未进入暂存区的修改 git checkout + 文件名 2.取消已经进入暂存区但是还未提交的修改 git reset HEAD + 文件名 3.清理在远程仓库已经被删除的本地分支 git ...

  4. 转:【专题十二】实现一个简单的FTP服务器

    引言: 休息一个国庆节后好久没有更新文章了,主要是刚开始休息完心态还没有调整过来的, 现在差不多进入状态了, 所以继续和大家分享下网络编程的知识,在本专题中将和大家分享如何自己实现一个简单的FTP服务 ...

  5. ELKF安装使用教程。elasticsearch+logstash+kibana+filebeta。

    近期因工作需要学习了ELKF的安装和使用.网络上的中文我看大部分也比较老版本了,我想写一下,希望能给他人带来一点帮助.小弟不才,有错位之处,还请大家原谅指点. ELKF就是:elasticsearch ...

  6. JavaScript使用localStorage缓存Js和css文件

    对于WebApp来说,将js css文件缓存到localstorage区可以减少页面在加载时与HTTP请求的交互次数,从而优化页面的加载时间.特别是当移端信号不好高延迟时优化效果还是很显见的 下面的代 ...

  7. 你知道CSS实现水平垂直居中的第10种方式吗?

    你知道CSS实现水平垂直居中的第10种方式吗? 仅居中元素定宽高适用: absolute + 负 margin absolute + margin auto absolute + calc 居中元素不 ...

  8. ajax 检测用户名是否可用

    下面是一个 ajax 检测用户名是否可用的例子. django  项目中. —— views.py 里—— from django.shortcuts import render,HttpRespon ...

  9. 算法训练 P0505

    一个整数n的阶乘可以写成n!,它表示从1到n这n个整数的乘积.阶乘的增长速度非常快,例如,13!就已经比较大了,已经无法存放在一个整型变量中:而35!就更大了,它已经无法存放在一个浮点型变量中.因此, ...

  10. Java技术学习路线笔记:Maven安装和作用

    Maven是一个基于项目对象模型(POM)的概念的纯java开发的开源的项目管理工具.主要用来管理java项目,进行依赖管理(jar包管理,能自动分析项目所需的依赖软件包,并到Maven仓库区下载)和 ...