题目链接

 #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 (简单分块模板)的更多相关文章

  1. ACdream 1738 世风日下的哗啦啦族I(分块大法+二分)

    世风日下的哗啦啦族I Time Limit: 4000/2000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Submit S ...

  2. acdream 1738 世风日下的哗啦啦族I 分块

    世风日下的哗啦啦族I Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acdream.info/problem?pid=1738 Descri ...

  3. Acdream 1738 世风日下的哗啦啦族I 树套树

    世风日下的哗啦啦族I Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acdream.info/problem?pid=1738 Descri ...

  4. acdream 1738 世风日下的哗啦啦族I

    原题链接:http://acdream.info/problem?pid=1738 树套树裸题,如下: #include<algorithm> #include<iostream&g ...

  5. 一个简单的模板引(han)擎(shu)

    自制一个简单的模板引(han)擎(shu) 原理 说大了 实际上是模板函数 原理呢就是简单的字符串替换 第一版 var data = { username: 'Muhha' } str = '< ...

  6. 卿学姐与公主 UESTC - 1324 分块模板题

    题意:http://acm.uestc.edu.cn/#/problem/show/1324 中文题,自己看喽. 题解:分块模板,update时顺便更新块属性.ask时先判掉belong[l]==be ...

  7. BZOJ 2724 蒲公英 | 分块模板题

    题意 给出一个序列,在线询问区间众数.如果众数有多个,输出最小的那个. 题解 这是一道分块模板题. 一个询问的区间的众数,可能是中间"整块"区间的众数,也可能是左右两侧零散的数中的 ...

  8. Luogu 2801 教主的魔法 | 分块模板题

    Luogu 2801 教主的魔法 | 分块模板题 我犯的错误: 有一处l打成了1,还看不出来-- 缩小块大小De完bug后忘了把块大小改回去就提交--还以为自己一定能A了-- #include < ...

  9. php实现简单视图模板(视图引擎)

    视图 视图,你所看见的部分. <?php echo 'hello, world'; 从简单开始理解 这就是个视图文件中的代码,没错就这么简单.视图,实际上是在 MVC 这种架构上提出的.MVC ...

随机推荐

  1. Flyweight Pattern

    1.Flyweight 模式以共享的方式高效的支持大量的细粒度对象,对象分为内部状态.外部状态.将可以被共享的状态作为内部状态存储在对象中,而外部状态在适当的时候作为参数传递给对象. 当以下所有的条件 ...

  2. 驱动框架入门——以LED为例[【转】

    本文转载自;http://blog.csdn.net/oqqHuTu12345678/article/details/72783903 以下内容源于朱有鹏<物联网大讲堂>课程的学习,如有侵 ...

  3. 青岛理工交流赛 H题 素数间隙

    13110581088注销 素数间隙 Time Limit: 1000MS Memory limit: 262144K 题目描述 Neko猫是一个很喜欢玩数字游戏的会说话的肥猫,经常会想到很多很好玩的 ...

  4. Codeforces Round #304 (Div. 2) C. Soldier and Cards —— 模拟题,队列

    题目链接:http://codeforces.com/problemset/problem/546/C 题解: 用两个队列模拟过程就可以了. 特殊的地方是:1.如果等大,那么两张牌都丢弃 : 2.如果 ...

  5. Linux常用命令之scp

    目录 1.拷贝远程文件到本地 2.拷贝远程文件夹到本地 3.拷贝本地文件到远程 4.拷贝本地文件夹到远程 1.拷贝远程文件到本地 scp root@101.132.169.194:/home/wwwr ...

  6. 让tomcat启动时,自动加载你的项目

    在tomcat-->conf-->serve.xml文件最后加上 <Context path="/atest" docBase="E:\Workspac ...

  7. 脚踏实地学C#3-装箱和拆箱

    装箱:一种接受值类型的值,根据这个值在堆中创建一个完整的引用类型对象并返回对象的引用(堆地址)的隐式转换 int i_number = 2; //在栈中声明int类型i_Number变量并初始化 ob ...

  8. Python:循环

    循环语句:while循环,for循环 例1:求1-100的所有数的和 n = 100 sum = 0 count = 1 while count <= n: sum = sum + count ...

  9. IDEA 设置背景颜色及字号

    intellij IDEA 设置背景颜色   File--> Settings 2. Appearance & Behavior --> Appearance 设置边框背景颜色 3 ...

  10. vue-router 获得上一级路由以及返回上一级路由的方法

    if (this.$store.state.previousRouter.name) { this.$router.push({name: this.$store.state.previousRout ...