世风日下的哗啦啦族I (简单分块模板)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define inf 0x7fffffff
#define faster ios::sync_with_stdio(0);cin.tie(0) inline ll read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
} /********************************************************************/ const int maxn = +;
int n, m;
ll a[maxn], b[maxn];
int num, block;
ll minn[maxn], belong[maxn];
ll sum[maxn]; void makeblock(){
block = sqrt(n);
if(n%block) num = n/block+;
else num = n/block;
for(int i = ;i <= n;i++){
belong[i] = (i-)/block + ;
b[i] = a[i];
}
for(int i = ;i <= num;i++){
ll l = (i-)*block+, r = min(i*block, n);
for(int j = l;j <= r;j++){
b[j] = a[j];
}
sort(b+l, b+r+);
minn[i] = b[l];
sum[i] = ;
for(int j = l;j <= r;j++){
if(b[j] == minn[i])
sum[i]++;
else break;
}
}
return;
} //单点更新
void update(int x, int v){
a[x] = v;
int pos = belong[x];
ll l = (pos - )*block + ;
ll r = (pos*block, n);
for(ll i = l;i <= r;i++)
b[i] = a[i];
sort(b+l, b+r+);
minn[pos] = b[l];
sum[pos] = ;
for(int i = l;i <= r;i++){
if(b[i] == minn[pos])
sum[pos]++;
else break;
}
return;
} //区间查询
int ask(int l, int r){
ll ans = inf;
if(belong[l] == belong[r]){
for(int i = l;i <= r;i++){
ans = min(ans, a[i]);
}
}
else {
for(int i = l;i <= belong[l]*block;i++){
ans = min(ans, a[i]);
}
for(int i = belong[r-]*block+;i <= r;i++){
ans = min(ans, a[i]);
}
}
for(int i = belong[l]+;i < belong[r];i++){
ans = min(ans, minn[i]);
}
return ans;
} int ask1(int l, int r, int len){
ll ans = ;
if(belong[l] == belong[r]){
for(int i = l;i <= r;i++){
if(a[i] == len)
ans++;
}
}
else {
for(int i = l;i <= belong[l]*block;i++){
if(a[i] == len)
ans++;
}
for(int i = belong[r-]*block+;i <= r;i++){
if(a[i] == len)
ans++;
}
}
for(int i = belong[l]+;i < belong[r];i++){
if(minn[i] == len){
ans += sum[i];
}
}
return ans;
} int Find(int pos, int len){
if(minn[pos] < len)
return ;
ll l = (pos - )*block+;
ll r = min(pos*block, n);
int ans = ;
for(int i = l;i <= r;i++){
if(b[i] <= len)
ans++;
else break;
}
return ans;
} int deal(int l, int r, int len){
int ans = ;
if(belong[l] == belong[r]){
for(int i = l;i <= r;i++){
if(a[i] <= len) ans++;
}
}
else{
for(int i = l;i <= belong[l]*block;i++){
if(a[i] <= len) ans++;
}
for(int i = belong[r-]*block+;i <= r;i++){
if(a[i] <= len) ans++;
}
}
for(int i = belong[l]+;i < belong[r];i++){
ans += Find(i, len);
}
return ans;
} int main(){
n = read(); m = read();
for(int i = ;i <= n;i++){
a[i] = read();
}
makeblock();
while(m--){
int op, x, y, v;
op = read();
if(op == ){
x = read(); v = read();
update(x, v);
}
else if(op == ){
x = read(); y = read();
int tmp = ask(x, y);
int tmp1 = ask1(x, y, tmp);
printf("%d %d\n", tmp, tmp1);
}
else if(op == ){
x = read(); y = read(); v = read();
int tmp = deal(x, y, v);
printf("%d\n", tmp);
}
}
return ;
}
世风日下的哗啦啦族I (简单分块模板)的更多相关文章
- ACdream 1738 世风日下的哗啦啦族I(分块大法+二分)
世风日下的哗啦啦族I Time Limit: 4000/2000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Submit S ...
- acdream 1738 世风日下的哗啦啦族I 分块
世风日下的哗啦啦族I Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acdream.info/problem?pid=1738 Descri ...
- Acdream 1738 世风日下的哗啦啦族I 树套树
世风日下的哗啦啦族I Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acdream.info/problem?pid=1738 Descri ...
- acdream 1738 世风日下的哗啦啦族I
原题链接:http://acdream.info/problem?pid=1738 树套树裸题,如下: #include<algorithm> #include<iostream&g ...
- 一个简单的模板引(han)擎(shu)
自制一个简单的模板引(han)擎(shu) 原理 说大了 实际上是模板函数 原理呢就是简单的字符串替换 第一版 var data = { username: 'Muhha' } str = '< ...
- 卿学姐与公主 UESTC - 1324 分块模板题
题意:http://acm.uestc.edu.cn/#/problem/show/1324 中文题,自己看喽. 题解:分块模板,update时顺便更新块属性.ask时先判掉belong[l]==be ...
- BZOJ 2724 蒲公英 | 分块模板题
题意 给出一个序列,在线询问区间众数.如果众数有多个,输出最小的那个. 题解 这是一道分块模板题. 一个询问的区间的众数,可能是中间"整块"区间的众数,也可能是左右两侧零散的数中的 ...
- Luogu 2801 教主的魔法 | 分块模板题
Luogu 2801 教主的魔法 | 分块模板题 我犯的错误: 有一处l打成了1,还看不出来-- 缩小块大小De完bug后忘了把块大小改回去就提交--还以为自己一定能A了-- #include < ...
- php实现简单视图模板(视图引擎)
视图 视图,你所看见的部分. <?php echo 'hello, world'; 从简单开始理解 这就是个视图文件中的代码,没错就这么简单.视图,实际上是在 MVC 这种架构上提出的.MVC ...
随机推荐
- DTLS学习笔记 -- RFC 4347- 6347
想学习一下dtls,是因为想以后没有公司免费VPN可用的时候,我能买一个主机,自己建一个VPN. 1.介绍 Web, email大多用TLS协议来做安全的网络传输,它们必须跑在可靠的TCP传输通道里. ...
- spring boot 使用redis 及redis工具类
1-添加maven依赖 2-添加redis配置 3-工具类 1-添加maven依赖 实际上是封装了jedis <!-- redis 依赖--> <dependency> < ...
- xmlToEntity or entityToXML 工作笔记
最近工作中调用接口,返回报文是String,取值不方便,需要转换为实体,回来自己简单写了个demo,基本上可以满足工作需求. 除了下面代码外,还要创建对应的实体. package yh.test.t1 ...
- 向HTML页面传入参数
这次是想将参数传入HTML页面,通过js获取参数信息,动态生成HTML页面内容: 方法一: <script> function GetArgsFromHref(sHref, sArgNam ...
- runtime之实现对象序列化
/* iOS序列化,将对象转成二进制,保存到本地 */ 定义一个对象,让它实现NSCoding协议,保证对象的编码和解码,person有三个属性 @interface Person : NSObjec ...
- codeforces B. Roma and Changing Signs 解题报告
题目链接:http://codeforces.com/problemset/problem/262/B 题目意思:给出 n 个数和恰好一共要做的操作总数k.通过对n个数进行k次操作,每次操作可以把a[ ...
- java.lang.Exception: Socket bind failed: [730048] 端口被占用
错误提示如下: org.apache.coyote.http11.Http11AprProtocol init 严重: Error initializing endpoint java.lang.Ex ...
- 清理html中空白符/空格/换行在行内元素中产生的间距
问题:行内元素之间产生间隔 原因:换行符,Tab制表符,空格产生间隔 解决方法: 1.行内元素写成一行 2.设置font-size为0px 把父级文本设置为0px; 再为需要显示文字的行内元素设置文字 ...
- RAM的分类
转载自:http://wenku.baidu.com/view/b17d73244b35eefdc8d333ab.html RAM(随机存储器)可以分为SRAM(静态随机存储器)和DRAM(动态随机存 ...
- Python_两种导入模块的方法异同
Python中有两种导入模块的方法 1:import module 2:from module import * 使用from module import *方法可以导入独立的项,也可以用from m ...