ZOJ 2015 10月份 月赛 3911 Prime Query
这道题我改啊,改啊,交啊,就对了。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = ;
const int M = ;
int a[N];
int p[M];
int tree[M*],cover[M*];
void Prime()
{
a[] = ;
for (int i=; i<sqrt(N); i++) {
if(a[i]);
else{
for (int j=*i; j<N ;j+=i) {
a[j]=;
}
}
}
}
void down(int i,int l,int r)
{ int k;
int mid=(l+r)>>;
if (cover[i] != -)
{
if(l!=r){cover[i<<]=cover[i<<|]=cover[i];
if(!a[cover[i]])k=;
else k=;
tree[i<<]=k*(mid-l+);
tree[i<<|]=k*(r-mid);}
else p[l]=cover[i];
cover[i]=-;
}
}
void build(int rt,int l,int r)
{
if(l==r){
if(!a[p[l]])
tree[rt]=;
else tree[rt]=;
return;
}
int mid=(l+r)>>;
build(rt<<,l,mid);
build(rt<<|,mid+,r);
tree[rt]=tree[rt<<]+tree[rt<<|];
}
void A(int v,int l,int rt,int L,int R)
{ down(rt,L,R);
if(L==R){
if(!a[p[l]+=v])
tree[rt]=;
else tree[rt]=;
return;
} int mid=(L+R)>>;
if(l<=mid)A(v,l,rt<<,L,mid);
if(l>mid)A(v,l,rt<<|,mid+,R);
tree[rt]=tree[rt<<]+tree[rt<<|];
}
int Q(int l,int r,int rt,int L,int R)
{ down(rt,L,R);
if(L>=l&&R<=r){
return tree[rt];
}
int ans=; int mid=(L+R)>>;
if(l<=mid)ans+=Q(l,r,rt<<,L,mid);
if(r>mid)ans+=Q(l,r,rt<<|,mid+,R);
return ans;
}
void Re(int k,int l,int r,int rt,int L,int R)
{down(rt,L,R);
if(L>=l&&R<=r){
if(!a[k])
tree[rt]=R-L+;
else tree[rt]=;
cover[rt]=k;
return;
} int mid=(L+R)>>;
if(l<=mid)Re(k,l,r,rt<<,L,mid);
if(r>mid)Re(k,l,r,rt<<|,mid+,R);
tree[rt]=tree[rt<<]+tree[rt<<|];
}
int main() {
Prime();
int T,n,m;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%d",&p[i]);
}
build(,,n);
memset(cover,-,sizeof cover);
char s[];
while(m--)
{
scanf("%s",s);
if(s[]=='A')
{
int v,l;
scanf("%d%d",&v,&l);
A(v,l,,,n);
//for(int i=1;i<=n;i++)printf("%d ",p[i]);
// puts("");
}
else if(s[]=='Q')
{
int l,r;
scanf("%d%d",&l,&r);
printf("%d\n",Q(l,r,,,n));
//for(int i=1;i<=n;i++)printf("%d ",p[i]);
// puts("");
}
else if(s[]=='R')
{
int x,l,r;
scanf("%d%d%d",&x,&l,&r);
Re(x,l,r,,,n);
// for(int i=1;i<=n;i++)printf("%d ",p[i]);
// puts("");
}
}
}
}
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 10000005;
const int M = 100005;
int a[N];
int p[M];
int tree[M*4],cover[M*4];
void Prime()
{
a[1] = 1;
for (int i=2; i<sqrt(N); i++) {
if(a[i]);
else{
for (int j=2*i; j<N ;j+=i) {
a[j]=1;
}
}
}
}
void down(int i,int l,int r)
{
int k;
int mid=(l+r)>>1;
if (cover[i] != -1)
{
if(l!=r){cover[i<<1]=cover[i<<1|1]=cover[i];
if(!a[cover[i]])k=1;
else k=0;
tree[i<<1]=k*(mid-l+1);
tree[i<<1|1]=k*(r-mid);}
else p[l]=cover[i];
cover[i]=-1;
}
}
void build(int rt,int l,int r)
{
if(l==r){
if(!a[p[l]])
tree[rt]=1;
else tree[rt]=0;
return;
}
int mid=(l+r)>>1;
build(rt<<1,l,mid);
build(rt<<1|1,mid+1,r);
tree[rt]=tree[rt<<1]+tree[rt<<1|1];
}
void A(int v,int l,int rt,int L,int R)
{ down(rt,L,R);
if(L==R){
if(!a[p[l]+=v])
tree[rt]=1;
else tree[rt]=0;
return;
}
int mid=(L+R)>>1;
if(l<=mid)A(v,l,rt<<1,L,mid);
if(l>mid)A(v,l,rt<<1|1,mid+1,R);
tree[rt]=tree[rt<<1]+tree[rt<<1|1];
}
int Q(int l,int r,int rt,int L,int R)
{ down(rt,L,R);
if(L>=l&&R<=r){
return tree[rt];
}
int ans=0;
int mid=(L+R)>>1;
if(l<=mid)ans+=Q(l,r,rt<<1,L,mid);
if(r>mid)ans+=Q(l,r,rt<<1|1,mid+1,R);
return ans;
}
void Re(int k,int l,int r,int rt,int L,int R)
{down(rt,L,R);
if(L>=l&&R<=r){
if(!a[k])
tree[rt]=R-L+1;
else tree[rt]=0;
cover[rt]=k;
return;
}
int mid=(L+R)>>1;
if(l<=mid)Re(k,l,r,rt<<1,L,mid);
if(r>mid)Re(k,l,r,rt<<1|1,mid+1,R);
tree[rt]=tree[rt<<1]+tree[rt<<1|1];
}
int main() {
Prime();
int T,n,m;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&p[i]);
}
build(1,1,n);
memset(cover,-1,sizeof cover);
char s[10];
while(m--)
{
scanf("%s",s);
if(s[0]=='A')
{
int v,l;
scanf("%d%d",&v,&l);
A(v,l,1,1,n);
//for(int i=1;i<=n;i++)printf("%d ",p[i]);
// puts("");
}
else if(s[0]=='Q')
{
int l,r;
scanf("%d%d",&l,&r);
printf("%d\n",Q(l,r,1,1,n));
//for(int i=1;i<=n;i++)printf("%d ",p[i]);
// puts("");
}
else if(s[0]=='R')
{
int x,l,r;
scanf("%d%d%d",&x,&l,&r);
Re(x,l,r,1,1,n);
// for(int i=1;i<=n;i++)printf("%d ",p[i]);
// puts("");
}
}
}
}
ZOJ 2015 10月份 月赛 3911 Prime Query的更多相关文章
- ZOJ 3911 Prime Query ZOJ Monthly, October 2015 - I
Prime Query Time Limit: 1 Second Memory Limit: 196608 KB You are given a simple task. Given a s ...
- ZOJ 3911 Prime Query(线段树)
Prime Query Time Limit: 1 Second Memory Limit: 196608 KB You are given a simple task. Given a s ...
- Prime Query (ZOJ 3911 线段树)
Prime Query Time Limit: 1 Second Memory Limit: 196608 KB You are given a simple task. Given a sequen ...
- 143 - ZOJ Monthly, October 2015 I Prime Query 线段树
Prime Query Time Limit: 1 Second Memory Limit: 196608 KB You are given a simple task. Given a s ...
- ZOJ 5638——Prime Query——————【线段树区间更新,区间查询,单点更新】
Prime Query Time Limit: 1 Second Memory Limit: 196608 KB You are given a simple task. Given a s ...
- 4分钟apache自带ab压力测试工具使用: 2015.10.4
2015.10.44分钟apache自带ab压力测试工具使用:win8.1 wampserver2.5 -Apache-2.4.9-Mysql-5.6.17-php5.5.12-64b 可以参考一下部 ...
- 【LGR-054】洛谷10月月赛II
[LGR-054]洛谷10月月赛II luogu 成功咕掉Codeforces Round #517的后果就是,我\(\mbox{T4}\)依旧没有写出来.\(\mbox{GG}\) . 浏览器 \( ...
- First Scrum Meeting (2015/10/18)
会议是在昨晚进行的,本来早就应该写博了,可惜今天校园网炸个不停= =.刚修好就赶紧来发博客. 会议基本要素 会议主题:爬虫项目的核心技术讨论以及项目初期的工作分配 会议时间:2015.10.18 19 ...
- 2015/10/9 Python核编初级部分学习总结
终于在十一长假之后的两天看完了<Python核心编程>的初级部分.虽然到后来两章,类和环境看得越来越慢,越来越难以理解.很多东西只能靠强记,也没办法真正掌握了,我想了想,还是不强迫自己去背 ...
随机推荐
- ubuntu12.04编译rtems doc目录
我的rtem的版本是rtems-4.10.2:首先安装textinfo:sudo apt-get install texinfo 然后: cd rtems-4.10.2/doc../bootstrap ...
- 用 localhost 访问正常,替换成 IP ,部分 CSS 或 JS 就失效了
这应该是浏览器的兼容性问题. 经测试,只要不是360浏览器的兼容模式,将 localhost 替换成 IP 无影响. 来自为知笔记(Wiz)
- Maven的安装与使用(ubuntu)
一.安装Maven 1.下载Maven,http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-m ...
- S2SH+Hibernate search出现的问题
一 java.lang.NoSuchMethodError: org.hibernate.engine.transaction.spi.TransactionEnvironment.getJtaPl ...
- mysql2redis
mysql2redis这个项目主要解决mysql数据跟redis数据同步的问题 目前在测试环境研究这方面的应用,以下是git上面的介绍 git入口 git安装入口 Dependencies pl ...
- javascript中通过className灵活查找元素 例如我们要把根据class来进行修改样式
一.背景:一个表单中,要修改一些li中有class=box的样式,将它的background设置为red红色.一般的做法是我们可以先找到父级元素 ,然后由父级元素找到所有相关tagName,最后,来一 ...
- 用高德地图API 通过详细地址获得经纬度
http://cloud.sinyway.com/Service/amap.html http://restapi.amap.com/v3/geocode/geo?key=xxxxxxxxxxxxxx ...
- Nothing
破烂的文具盒里,一张十年的纸条子和一袋存了十年的德芙巧克力 浅绿色的纸条子上写是当时你给我抄的作业题目,蓝色清秀的字体 但是十年后,你却已嫁他人 将身后的风雪.夕阳,空气埋葬.窑藏,待非常多年以后酿成 ...
- 详解Android动画之Tween Animation
前面讲了动画中的Frame动画,今天就来详细讲解一下Tween动画的使用. 同样,在开始实例演示之前,先引用官方文档中的一段话: Tween动画是操作某个控件让其展现出旋转.渐变.移动.缩放的这么一种 ...
- careercup-栈与队列 3.1
3.1 描述如何只用一个数组来实现三个栈. 解答 我们可以很容易地用一个数组来实现一个栈,压栈就往数组里插入值,栈顶指针加1: 出栈就直接将栈顶指针减1:取栈顶值就把栈顶指针指向的单元的值返回: 判断 ...