SPOJ 3261. Race Against Time(RACETIME)(分块)
来源:互联网 发布:linux时间修改命令 编辑:程序博客网 时间:2024/06/15 10:16
题意:给n个数,有两种操作,一种是修改第i个数,第二种是查询[L,R]中小于等于X的数的个数。
思路:表示不会树套树,只好用分块搞掉。。。分完块以后二分找一下就好了,其实还是挺快的
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<map>#include<queue>#include<stack>#include<cmath>#include<vector>#define inf 0x3f3f3f3f#define Inf 0x3FFFFFFFFFFFFFFFLL#define eps 1e-9#define pi acos(-1.0)using namespace std;typedef long long ll;const int maxn=100000+10;const int Size=355;int block[Size+10][Size+10];int num[maxn];void Init(int n){ for(int i=0;i<n;++i) { scanf("%d",&num[i]); block[i/Size][i%Size]=num[i]; } for(int i=0;i<=n/Size;++i) sort(block[i],block[i]+Size);}void Modify(int p,int x){ int y=num[p]; num[p]=x; int bk=p/Size; for(int i=0;i<Size;++i) if(block[bk][i]==y) { block[bk][i]=x; break; } sort(block[bk],block[bk]+Size);}int Query(int L,int R,int X){ int Lb=L/Size,Rb=R/Size; int cnt=0; if(Lb==Rb) { for(int i=L;i<=R;++i) cnt+=(num[i]<=X); } else { for(int i=L;i<(Lb+1)*Size;++i) cnt+=(num[i]<=X); for(int i=Rb*Size;i<=R;++i) cnt+=(num[i]<=X); for(int i=Lb+1;i<Rb;++i) cnt+=upper_bound(block[i],block[i]+Size,X)-block[i]; } return cnt;}int main(){ //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int n,q; char str[5]; while(~scanf("%d%d",&n,&q)) { Init(n); int L,R,X; while(q--) { scanf("%s",str); if(str[0]=='M') { scanf("%d%d",&L,&X); Modify(L-1,X); } else { scanf("%d%d%d",&L,&R,&X); int ans=Query(L-1,R-1,X); printf("%d\n",ans); } } } return 0;}
0 0
- SPOJ 3261. Race Against Time(RACETIME)(分块)
- SPOJ 3261. Race Against Time(RACETIME) 【线段树套SBT】
- Codeforces868B Race Against Time
- Codeforce Race Against Time
- CF 868 B. Race Against Time【模拟】
- codeforces 868B Race Against Time
- Codeforces 868B. Race Against Time 模拟
- 【Codeforces 868 B. Race Against Time】& 模拟
- Codeforces Round #438 B. Race Against Time
- Codeforces868B Race Against Time (模拟)
- CodeForces 868B Race Against Time
- codeforces 868B Race Against Time
- Codeforces Round #438 B. Race Against Time 思路很重要
- Codeforces Round #438 (868B) B Race Against Time
- Codeforces 868 B Race Against Time(水题)
- CodeFroces Round 438 B.Race Against Time(模拟)
- Codeforces Round #438 B Race Against Time(模拟)
- Codeforces Round #438 B. Race Against Time 题解
- 黑马程序员_面向对象_多态&接口
- Linux零散知识点
- FreeMarker系列学习笔记(3)——sturts2 result type为 freemarker
- nginx中禁止屏蔽网络爬虫
- Android绘图知识点简介
- SPOJ 3261. Race Against Time(RACETIME)(分块)
- java synchronized详解
- Spring AOP注解通过@Autowired,@Resource,@Qualifier,@PostConstruct,@PreDestroy注入属性的配置文件详解
- MFC消息机制的介绍
- POJ 1151 Atlantis 求矩阵面积并 扫描线 详解
- 使用myeclipse的configuration center安装subclipse插件
- 道德经全文及译文 第三章
- 我们的龙芯2号
- Windows程序的打包,部署(vs项目打包vs2013)---ShinePans