这道题我改啊,改啊,交啊,就对了。

#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的更多相关文章

  1. 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 ...

  2. ZOJ 3911 Prime Query(线段树)

    Prime Query Time Limit: 1 Second      Memory Limit: 196608 KB You are given a simple task. Given a s ...

  3. Prime Query (ZOJ 3911 线段树)

    Prime Query Time Limit: 1 Second Memory Limit: 196608 KB You are given a simple task. Given a sequen ...

  4. 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 ...

  5. ZOJ 5638——Prime Query——————【线段树区间更新,区间查询,单点更新】

    Prime Query Time Limit: 1 Second      Memory Limit: 196608 KB You are given a simple task. Given a s ...

  6. 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 可以参考一下部 ...

  7. 【LGR-054】洛谷10月月赛II

    [LGR-054]洛谷10月月赛II luogu 成功咕掉Codeforces Round #517的后果就是,我\(\mbox{T4}\)依旧没有写出来.\(\mbox{GG}\) . 浏览器 \( ...

  8. First Scrum Meeting (2015/10/18)

    会议是在昨晚进行的,本来早就应该写博了,可惜今天校园网炸个不停= =.刚修好就赶紧来发博客. 会议基本要素 会议主题:爬虫项目的核心技术讨论以及项目初期的工作分配 会议时间:2015.10.18 19 ...

  9. 2015/10/9 Python核编初级部分学习总结

    终于在十一长假之后的两天看完了<Python核心编程>的初级部分.虽然到后来两章,类和环境看得越来越慢,越来越难以理解.很多东西只能靠强记,也没办法真正掌握了,我想了想,还是不强迫自己去背 ...

随机推荐

  1. HW4.22

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  2. HDU 1159 Common Subsequence 公共子序列 DP 水题重温

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Time Limit: 2000/1000 MS (Jav ...

  3. cdn加速对门户网站产生的影响

    满意的用户体验是门户网站吸引和留住用户的必备条件.据统计,如果等待网页打开的时间超过8秒,将会有超过30%的用户放弃等待,造成严重的用户流失,降低了用户的体验度和忠诚度.门户网站内容涉及面多,涵盖文字 ...

  4. PTA 07-图4 哈利·波特的考试 (25分)

    哈利·波特要考试了,他需要你的帮助.这门课学的是用魔咒将一种动物变成另一种动物的本事.例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等.反方向变化的魔咒就是简单地将原来的魔咒倒过来念 ...

  5. spring使用ehcache

    spring本身内置了对Cache的支持,之前记录的是基于Java API的ConcurrentMap的CacheManager配置,现使用ehcache实现. 1.声明对cache的支持 <b ...

  6. Java 8 新特性概述

    Oracle 在 2014 年 3 月发布了 Java 8 正式版,该版本是一个有重大改变的版本,对 JAVA 带来了诸多新特性.其中主要的新特性涵盖:函数式接口.Lambda 表达式.集合的流式操作 ...

  7. 安装windows7、windows8.1提示无法创建新的分区

    有时候用原版系统镜像安装windows系统时,会提示“windows无法安装到这个磁盘.选中的磁盘采用GPT分区形式”,导致安装失败,下面就来讲解一下如何解决. 1.在系统提示无法安装的那一步,按住“ ...

  8. 【Apache Kafka】安装指南

    在Ubuntu12.04 server上安装单结点kafka,我的机器上之前已经安装过zookeeper-3.4.5 根据官网的说明:http://kafka.apache.org/07/quicks ...

  9. Java为何大行其道

    Java为何大行其道 --专訪传智播客冯威老师 冯威老师,多年来一直从事软件开发和教学工作.先后担任过项目经理.软件架构师.软件开发project师.系统架构师.讲师等.具备丰富的软件开发经验和教学经 ...

  10. Nginx平台构架 分类: Nginx 2015-07-13 10:55 205人阅读 评论(0) 收藏

    深入理解Nginx模块发开与架构解析读书笔记. nginx在启动后,在unix系统中会以daemon的方式(可以手动关闭 nginx.conf daemon off)在后台运行,后台进程包含一个mas ...