分块试水--CODEVS5037 线段树练习4加强版
感觉这才算入门题吧。。前面那些线段树练习,改几个字符就过了一定要搞成几道题。。
n<=2e5的数列,给常数K<=2e5,m<=2e5个操作,区间加,问一个区间里K的倍数。
这题空间???当成512MB吧。。n*sqrt(n)开得下
每个块记cnt(x,i)表示第x个块有多少数%K=i,以及整块+标记add(x),然后回答询问时默认一个块里的数都加上了add(x)即可,修改常规。
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<stdlib.h>
#include<math.h>
//#include<iostream>
using namespace std; int n,m,q,K;
#define maxn 200011
#define maxm 461
int cnt[maxm][maxn],a[maxn],bel[maxn],tot,add[maxm];
void modify(int x,int y,int v)
{
if (bel[x]==bel[y])
for (int i=x;i<=y;i++) cnt[bel[i]][a[i]]--,a[i]+=v,a[i]%=K,cnt[bel[i]][a[i]]++;
else
{
for (int i=bel[x]+;i<bel[y];i++) add[i]+=v,add[i]%=K;
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]]++;
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]]++;
}
}
int query(int x,int y)
{
int ans=;
if (bel[x]==bel[y])
for (int i=x;i<=y;i++) ans+=(a[i]+add[bel[i]]== || a[i]+add[bel[i]]==K);
else
{
for (int i=bel[x]+;i<bel[y];i++) ans+=cnt[i][add[i]?K-add[i]:];
for (int i=x;bel[x]==bel[i];i++) ans+=(a[i]+add[bel[i]]== || a[i]+add[bel[i]]==K);
for (int i=y;bel[y]==bel[i];i--) ans+=(a[i]+add[bel[i]]== || a[i]+add[bel[i]]==K);
}
return ans;
} bool isdigit(char c) {return c>='' && c<='';}
int qread()
{
char c;int s=;while (!isdigit(c=getchar()));
do s=s*+c-''; while (isdigit(c=getchar())); return s;
}
int main()
{
n=qread(),q=qread(),K=qread();
m=(int)sqrt(n);
for (int i=;i<=n;i++) bel[i]=(i-)/m+;
tot=bel[n]; for (int i=;i<=n;i++)
{
a[i]=qread()%K;
cnt[bel[i]][a[i]]++;
} char c;
for (int i=,x,y,z;i<=q;i++)
{
while (!((c=getchar())>='a' && c<='z'));
if (c=='a')
{
x=qread(),y=qread(),z=qread();
modify(x,y,z);
}
else
{
x=qread(),y=qread();
printf("%d\n",query(x,y));
}
while (c>='a' && c<='z') c=getchar();
}
return ;
}
分块试水--CODEVS5037 线段树练习4加强版的更多相关文章
- 分块试水--CODEVS4927 线段树练习5
模板 #include<stdio.h> #include<algorithm> #include<string.h> #include<stdlib.h&g ...
- codevs5037 线段树练习4加强版(暴力分块)
求大爷教线段树怎么写啊QAQ 只会写分块...一开始脑抽写成了O(NKlogN)还被CZL大爷嘲讽了一发T T f[i][j]表示在第i块中,模k为j的数有几个,然后每次修改的时候只需要打个标记,查询 ...
- CODEVS.5037.线段树练习4加强版(分块 区间k的倍数)
题目链接 /* 如果用线段树,每个节点要再开k的空间,显然不行.但是分块可以(虽然空间依旧爆炸) 分块.用bloans[i][j]表示 第i块 模k为j 的有多少个 对于不是整块的,查询时应判断 A[ ...
- 51NOD 1287 加农炮(不水的线段树)
>>点击进入原题测试<< Input示例 Output示例 思路:刚开始以为结点存最大值就行了,然后大于左子树的最大值就能进入右子树:然后发现样例都过不了:后面发现,并不是这个 ...
- 线段树专题2-(加强版线段树-可持续化线段树)主席树 orz! ------用于解决区间第k大的问题----xdoj-1216
poj-2104(区间第K大问题) #include <iostream> #include <algorithm> #include <cstdio> #incl ...
- 【wikioi】1191 数轴染色(线段树+水题)
http://wikioi.com/problem/1191/ 太水的线段树了,敲了10分钟就敲完了,但是听说还有一种并查集的做法?不明觉厉. #include <cstdio> #inc ...
- 2014 Super Training #9 F A Simple Tree Problem --DFS+线段树
原题: ZOJ 3686 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3686 这题本来是一个比较水的线段树,结果一个ma ...
- 【线段树】Bzoj1230 [Usaco2008 Nov]lites 开关灯
Description Farmer John尝试通过和奶牛们玩益智玩具来保持他的奶牛们思维敏捷. 其中一个大型玩具是牛栏中的灯. N (2 <= N <= 100,000) 头奶牛中的每 ...
- [CF52C]Circular RMQ【线段树】
题目大意 给你一个环形数列,完成环形数列上区间加法和区间求最小值. 分析 算是一道比较水的线段树模板题. 如果l>r的话,那么修改l,n和1,r区间. 不然的话那么就修改l,r区间. 其他的基础 ...
随机推荐
- vue-cli 升级至 webpack 4 指北
时至今日(2018-7-11),vue-cli 任然未稳定支持至webpack4,所以我自己也来创建一个 vue 初始化模板 不过大致的原因我也能猜到,因为很多插件仍然是一个不稳定的点,比如我在创建中 ...
- C#与C++的区别(三) 委托与事件
在C#中没有C++中的函数指针的概念,但是有委托的概念,功能与函数指针类似. C# 委托(Delegate) C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针.委托(Delega ...
- Linux环境下RPM包相互依赖的解决办法
Linux环境下安装Oracle11gR2提示缺少"Package: elfutils-libelf-devel-0.125 FAILED"包,按照提示安装该包时又提示缺少依 ...
- 利用 nodeJS 搭建一个简单的Web服务器(转)
下面的代码演示如何利用 nodeJS 搭建一个简单的Web服务器: 1. 文件 WebServer.js: //-------------------------------------------- ...
- [转]URL最大长度问题
本文转自:http://www.cnblogs.com/henryhappier/archive/2010/10/09/1846554.html 今天在测试Email Ticket的时候发现在进行Ma ...
- C#基础 集合
//数组定义的时候 //需要定义数据类型 //需要定义初始长度 //int [] array = new int[5]; //int a = array.Length; //集合 //ArrayLis ...
- Jquery 全选、反选问题的记录
<div id="list"> <ul id="choseList" > <li><input type=" ...
- C#时间相关方法
当前电脑的时间: DateTime.Now//当前时间 DateTime.Now.Date//当前日期的 0:00:00 DateTime.Now.ToLongDateString();//显示日期 ...
- 关于串通京东接口的demo
public string Get(int id) { JObject o = new JObject( new JProperty("billNo", "ESL1363 ...
- Android五大布局介绍&属性设置大全
前言 在进行Android开发中,常常需要用到各种布局来进行UI的绘制,今天我们就来讲下Android开发中最常用的五大布局介绍和相关属性的设置. 目录 Android五大布局介绍&属性设置. ...