分块试水--CODEVS5037 线段树练习4加强版
感觉这才算入门题吧。。前面那些线段树练习,改几个字符就过了一定要搞成几道题。。
n<=2e5的数列,给常数K<=2e5,m<=2e5个操作,区间加,问一个区间里K的倍数。
这题空间???当成512MB吧。。n*sqrt(n)开得下
每个块记cnt(x,i)表示第x个块有多少数%K=i,以及整块+标记add(x),然后回答询问时默认一个块里的数都加上了add(x)即可,修改常规。
1 #include<stdio.h> 2 #include<algorithm> 3 #include<string.h> 4 #include<stdlib.h> 5 #include<math.h> 6 //#include<iostream> 7 using namespace std; 8 9 int n,m,q,K; 10 #define maxn 200011 11 #define maxm 461 12 int cnt[maxm][maxn],a[maxn],bel[maxn],tot,add[maxm]; 13 void modify(int x,int y,int v) 14 { 15 if (bel[x]==bel[y]) 16 for (int i=x;i<=y;i++) cnt[bel[i]][a[i]]--,a[i]+=v,a[i]%=K,cnt[bel[i]][a[i]]++; 17 else 18 { 19 for (int i=bel[x]+1;i<bel[y];i++) add[i]+=v,add[i]%=K; 20 for (int i=x;bel[i]==bel[x];i++) cnt[bel[i]][a[i]]--,a[i]+=v,a[i]%=K,cnt[bel[i]][a[i]]++; 21 for (int i=y;bel[i]==bel[y];i--) cnt[bel[i]][a[i]]--,a[i]+=v,a[i]%=K,cnt[bel[i]][a[i]]++; 22 } 23 } 24 int query(int x,int y) 25 { 26 int ans=0; 27 if (bel[x]==bel[y]) 28 for (int i=x;i<=y;i++) ans+=(a[i]+add[bel[i]]==0 || a[i]+add[bel[i]]==K); 29 else 30 { 31 for (int i=bel[x]+1;i<bel[y];i++) ans+=cnt[i][add[i]?K-add[i]:0]; 32 for (int i=x;bel[x]==bel[i];i++) ans+=(a[i]+add[bel[i]]==0 || a[i]+add[bel[i]]==K); 33 for (int i=y;bel[y]==bel[i];i--) ans+=(a[i]+add[bel[i]]==0 || a[i]+add[bel[i]]==K); 34 } 35 return ans; 36 } 37 38 bool isdigit(char c) {return c>='0' && c<='9';} 39 int qread() 40 { 41 char c;int s=0;while (!isdigit(c=getchar())); 42 do s=s*10+c-'0'; while (isdigit(c=getchar())); return s; 43 } 44 int main() 45 { 46 n=qread(),q=qread(),K=qread(); 47 m=(int)sqrt(n); 48 for (int i=1;i<=n;i++) bel[i]=(i-1)/m+1; 49 tot=bel[n]; 50 51 for (int i=1;i<=n;i++) 52 { 53 a[i]=qread()%K; 54 cnt[bel[i]][a[i]]++; 55 } 56 57 char c; 58 for (int i=1,x,y,z;i<=q;i++) 59 { 60 while (!((c=getchar())>='a' && c<='z')); 61 if (c=='a') 62 { 63 x=qread(),y=qread(),z=qread(); 64 modify(x,y,z); 65 } 66 else 67 { 68 x=qread(),y=qread(); 69 printf("%d\n",query(x,y)); 70 } 71 while (c>='a' && c<='z') c=getchar(); 72 } 73 return 0; 74 }
View Code
转载于:https://www.cnblogs.com/Blue233333/p/8027466.html
分块试水--CODEVS5037 线段树练习4加强版相关推荐
- 分块试水--CODEVS4927 线段树练习5
模板 1 #include<stdio.h> 2 #include<algorithm> 3 #include<string.h> 4 #include<st ...
- CODEVS.5037.线段树练习4加强版(分块 区间k的倍数)
题目链接 /* 如果用线段树,每个节点要再开k的空间,显然不行.但是分块可以(虽然空间依旧爆炸)分块.用bloans[i][j]表示 第i块 模k为j 的有多少个 对于不是整块的,查询时应判断 A[i ...
- 51NOD 1287 加农炮(不水的线段树)
>>点击进入原题测试<< Input示例 9 11 1 2 0 4 3 2 1 5 7 2 8 0 7 6 5 3 4 5 6 5 Output示例 2 2 2 4 3 3 5 ...
- NEFU 1266 快乐的雨季 (线段树)
题意: 中文 思路: 线段树基础题当然亦可以分块做 代码: 线段树: #include <bits/stdc++.h> using namespace std; #define ls l, ...
- 【线段树】2019雅礼集训 sequence
题目: 给出k,和一个长度为n的序列A 有q次询问, 每次询问Al,Al+1,Al+2--,ArA_l,A_{l+1},A_{l+2}--,A_{r}Al,Al+1,Al+2--,Ar中,有多 ...
- 1355 巧克力 (线段树点+区间)
继续最水的线段树 简单粗暴 #include<cstdio> #include<cstring> #include<algorithm> #define lc p ...
- 2019长沙学院新生赛(A水,B水,C(整除分块),D水,E(巧数学),F(二分+bfs),H(换根dp),I(线段树)J(dp+倍增+lca))
A-XOR SUM 通过简单观察得知连续四个数的异或值就是等于0,暴力找出左区间和右区间就可以了,最多跑四个单位 0^1^2^3==0 4^5^6^7=0 #include<bits/std ...
- LibreOJ 6277,6278,6280 数列分块入门1,2,4 树状数组,分块,线段树等.
分块1 分块2 分块4 模板一共有九个.我试着在三天内做了3个. 应该不用超链接吧. 分块1 区间加,单点询问. 这不是裸的改版树状数组吗?用树状数组处理前缀和水过. #include<bits ...
- 【YBT2023寒假Day4 C】樱桃莓莓(交互)(四毛子分块)(线段树)
樱桃莓莓 题目链接:YBT2023寒假Day4 C 题目大意 有一个黑盒操作满足交换律和结合律,有 n 个数,q 次询问,每次选 m 个下标,你要计算所有不包含那 m 个下标的数进行黑盒操作之后的结果 ...
最新文章
- js数组的声明与应用
- python编程入门与实践_Python编程入门到实践(二)
- 在vue-cli中搭建mock服务器
- 基于dreamweaver软件设计和开发一网站_基于 abp vNext 和 .NET Core 开发博客项目 Blazor 实战系列(一)...
- 先富带动后富:雷军带领一大批程序员发家致富
- java反编译源码_java反编译获取源码
- 5 天 6 亿 3000 万数据泄露,怎么做才能跑赢骗子?
- scala设计模式_Scala中的工厂设计模式
- 浏览器了解(四)javascript解析
- ASP.NET中 TextBox控件使用 ReadOnly=true 属性
- 制造行业IT运维管理解决方案
- 凸优化中:单纯形是一种多面体的证明
- python地图匹配的步骤_地图匹配算法实践
- 微信小程序--引用外部字体(云开发实现)
- 因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配
- 手机时钟软件推荐,创意时钟APP介绍
- ADP(自适应动态规划)-HDP
- 微信小程序-电影app程序遇到得问题
- 阿里云服务器操作系统有哪些?如何选择?
- 编写自己的聊天网站(一)
热门文章
- win10开启telnet客户端
- Golang管道channel:管道的声明 读取 写入
- ansible roles角色(模块化)详解
- Python Django 查询数据缓存
- eureka客户端获取服务列表时间间隔配置
- Selenium自动写公众号文章
- centos7 开机延迟几分钟后自启动
- ksql 数量大于2_A股史上唯一能暴涨200%的买卖铁则:内盘大于外盘股价必跌,外盘大于内盘股价必涨,堪称绝技...
- 魅族怎么查看内存linux,这就是魅族超级旗舰:看燃
- vue中页面跳转传值_vue跳转方式(打开新页面)及传参操作示例