与hzw的分块2类似,放vector排序

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define R(a,b,c) for(register int a = (b); a <= (c); ++ a)
#define nR(a,b,c) for(register int a = (b); a >= (c); -- a)
#define Max(a,b) ((a) > (b) ? (a) : (b))
#define Min(a,b) ((a) < (b) ? (a) : (b))
#define Fill(a,b) memset(a, b, sizeof(a))
#define Abs(a) ((a) < 0 ? -(a) : (a))
#define Swap(a,b) a^=b^=a^=b
#define ll long long #define ON_DEBUG #ifdef ON_DEBUG #define D_e_Line printf("\n\n----------\n\n")
#define D_e(x) cout << #x << " = " << x << endl
#define Pause() system("pause")
#define FileOpen() freopen("in.txt","r",stdin); #else #define D_e_Line ;
#define D_e(x) ;
#define Pause() ;
#define FileOpen() ; #endif struct ios{
template<typename ATP>ios& operator >> (ATP &x){
x = 0; int f = 1; char c;
for(c = getchar(); c < '0' || c > '9'; c = getchar()) if(c == '-') f = -1;
while(c >= '0' && c <= '9') x = x * 10 + (c ^ '0'), c = getchar();
x*= f;
return *this;
}
}io;
using namespace std;
#include <vector> const int N = 1000007; int n; int block[N], blockSize;
int a[N], tag[N];
vector<int> V[1007]; inline void Reset(int x){
V[x].clear();
R(i,(x - 1) * blockSize + 1, block[x] * blockSize){
V[x].push_back(a[i]);
}
sort(V[x].begin(), V[x].end());
}
inline void Updata(int L, int R, int w){
int minn = Min(R, block[L] * blockSize);
R(i,L,minn){
a[i] += w;
}
Reset(block[L]);
if(block[L] != block[R]){
R(i, (block[R] - 1) * blockSize + 1, R){
a[i] += w;
}
Reset(block[R]);
}
R(i,block[L] + 1, block[R] - 1){
tag[i] += w;
}
}
inline int Query(int L, int R, int w){
int sum = 0;
int minn = Min(R, block[L] * blockSize);
R(i,L,minn){
sum += ((a[i] + tag[block[i]]) >= w);
}
if(block[L] != block[R]){
R(i, (block[R] - 1) * blockSize + 1, R){
sum += ((a[i] + tag[block[i]]) >= w);
}
}
R(i,block[L] + 1, block[R] - 1){
sum += blockSize - (lower_bound(V[i].begin(), V[i].end(), w - tag[i]) - V[i].begin());
} return sum;
} int main(){
int m;
io >> n >> m;
blockSize = sqrt(n);
R(i,1,n){
io >> a[i];
block[i] = (i - 1) / blockSize + 1;
V[block[i]].push_back(a[i]);
} int cnt = n / blockSize + 1;
R(i,1,cnt)
sort(V[i].begin(), V[i].end()); while(m--){
char opt;
int L, R, w;
cin >> opt;
io >> L >> R >> w;
if(opt == 'M'){
Updata(L, R, w);
}
else{
printf("%d\n", Query(L, R, w));
}
} return 0;
}

最新文章

  1. 你的指纹还安全吗? - BlackHat 2015 黑帽大会总结 day 2
  2. Spring Integration
  3. C#:安装Windows服务,动态指定服务名及描述
  4. java中的断言
  5. ORACLE 数据库概述以及Oracel数据库的安装、卸载、使用
  6. 关于删除linux多余内核
  7. jQuery Uploadify上传插件
  8. jquery实现点击改变背景色,点击其他恢复原来背景色,被点击的改变背景色
  9. 提取URL的搜索字符串中的参数
  10. ASP.NET MVC - Entity Framework
  11. python编程之如何在Windows上安装python
  12. 二十、MVC的WEB框架(Spring MVC)
  13. Hive在drop表的时候报错
  14. Final版本发布评论
  15. Jmeter之正则
  16. angular 获取当前值
  17. centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课
  18. DEBUG_NEW和THIS_FILE
  19. 实验二. 使用LoadRunner进行压力测试
  20. 通过阿里云域名动态解析 IP 地址

热门文章

  1. AMS 新闻视频广告的云原生容器化之路
  2. VB.net使用Microsoft.Office.Interop.Excel对Excel进行简单的读取和写入
  3. ML第一周学习小结
  4. [python][flask] Flask 图片上传与下载例子(支持漂亮的拖拽上传)
  5. React项目配置npm run build命令分环境打包
  6. 【二分图】匈牙利 &amp; KM
  7. 机器学习中 TP FP TN FN的概念
  8. 14.Nginx搭建及优化
  9. 在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
  10. 深入理解springboot的自动注入