世风日下的哗啦啦族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 ...
随机推荐
- DuiLib笔记之设置文本字体
设置文本字体要用到Font 它的常用属性如下 id 用于标识Font,类型:INT name 用于指定字体名称,类型:STRING size 用于指定字体大小,类型:INT bold 用于指定是否加粗 ...
- 侧方位停车想一次过,掌握边线30cm很重要!
侧方位停车要想一次过关,关键在于保持车身距离库边线30cm左右的距离.但是,往往有很多学员掌控不好这个距离,导致倒库时压线.那么,如何找准这个30cm呢?下面,小编就来教大家方法,赶紧学习吧! 侧方位 ...
- ArcGIS发布动态空间,并验证
发布 发布方法见视频. 验证 发布动态空间后,页面底部有 点进去后,使用如下语法验证. {"id": 0,"source": {"type" ...
- testing
doctest_test.py def square(x): ''' 这里需要空格 >>> square(2) 4 啦啦 >>> square(3) 9 上不一行能 ...
- BZOJ_2002_[Hnoi2010]Bounce 弹飞绵羊_LCT
BZOJ_2002_[Hnoi2010]Bounce 弹飞绵羊_LCT Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏. ...
- 使用 @RequestMapping 映射请求
- Field 'CID' doesn't have a default value
解决:在数据库客户端navicat中设计表勾选自动递增
- C++模板之可变模板参数
可变模板参数---- C++11新特性 可变模板参数(variadic templates)是C++11新增的最强大的特性之一,它对参数进行了高度泛化,它能表示0到任意个数.任意类型的参数 由于可变模 ...
- poj3417 Network——LCA+树上差分
题目:http://poj.org/problem?id=3417 根据一条边被几个环覆盖来判断能不能删.有几种情况等: 用树上差分,终点 s++,LCA s-=2,统计时计算子树s值的和即可: 用S ...
- FFmpeg常用命令 (二)
使用网络上的各种转码软件,简直崩溃了!比如,它竟然强行把你要编辑的视频的前面,现在可以使用ffmpeg. ffmpeg做IT media的都知道,很强大,只不多对windows用户比较麻烦,可以使用L ...