码迷,mamicode.com
首页 > 其他好文 > 详细

FZU 2171 防守阵地 II

时间:2014-08-09 02:30:06      阅读:379      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   color   os   io   数据   for   

E - 防守阵地 II
Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Submit

Status
Description
部队中总共有N个士兵,每个士兵有各自的能力指数Xi,
在一次演练中,指挥部确定了M个需要防守的地点,
指挥部将选择M个士兵依次进入指定地点进行防守任务,
获得的参考指数即为M个士兵的能力之和。

随着时间的推移,指挥部将下达Q个指令来替换M个进行防守的士兵们,
每个参加完防守任务的士兵由于疲惫等原因能力指数将下降1。

现在士兵们排成一排,请你计算出每次进行防守的士兵的参考指数。

Input
输入包含多组数据。

输入第一行有两个整数N,M,Q(1<=N<=100000,1<=M<=1000,1<=Q<=100000),
第二行N个整数表示每个士兵对应的能力指数Xi(1<=Xi<=1000)。

接下来Q行,每行一个整数X,
表示在原始队列中以X为起始的M个士兵替换之前的士兵进行防守。(1<=X<=N-M+1)

Output
输出Q行,每行一个整数,为每次指令执行之后进行防守的士兵参考指数。

Sample Input
5 3 3
2 1 3 1 4
1
2
3
Sample Output
6
3
5

 

 

一开始是看到觉得眼熟还有点小激动 结果数组没开4倍 简直了= =

 

之前有问过王大神 这题用线段树点修改是必超时的 就去看了 区间修改

目前有感觉只能套模板 还不能做到很流畅地运用

 

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#define mem(a,b) memset(a,b,sizeof(a))
#define ll __int64
#define MAXN 1000
#define INF 0x7ffffff
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
int sum[400000+10];// n<<2!!!!!
int add[1000000];
void pushup(int rt)
{
    //if(sum[rt<<1]<0) sum[rt<<1]=0;
    //if(sum[rt<<1|1]<0) sum[rt<<1|1]=0;
    sum[rt]=sum[rt<<1] +sum[rt<<1|1];
}
void pushdown(int rt,int m)
{
    if(add[rt])
    {
        add[rt<<1]+=add[rt];
        add[rt<<1|1]+=add[rt];
        sum[rt<<1]+=add[rt]*(m-(m>>1));
        sum[rt<<1|1]+=add[rt]*(m>>1);

        //if(sum[rt<<1]<0) sum[rt<<1]=0;
        //if(sum[rt<<1|1]<0) sum[rt<<1|1]=0;
        add[rt]=0;
    }
}
void build(int l,int r,int rt)
{
    if(l==r)
    {
        scanf("%d",&sum[rt]);
        return ;
    }
    int m=(l+r)>>1;
    build(lson); build(rson); pushup(rt);
}
void update(int L,int R,int c,int l,int r,int rt)
{
    if(L<=l&&r<=R)
    {
        add[rt]+=c;
        sum[rt]+=c*(r-l+1);
        return ;
    }
    pushdown(rt,r-l+1);
    int m=(l+r)>>1;
    if(R<=m) update(L,R,c,lson);
    else if(L>m) update(L,R,c,rson);
    else
    {
        update(L,R,c,lson);
        update(L,R,c,rson);
    }
    pushup(rt);
}
int query(int L,int R,int l,int r,int rt)
{
    if(L<=l&&r<=R)
    {

        return sum[rt];
    }
    pushdown(rt,r-l+1);
    int m=(l+r)>>1;
    int ret=0;
    if(R<=m) ret+=query(L,R,lson);
    else if(L>m) ret+=query(L,R,rson);
    else
    {
        ret+=query(L,R,lson);
        ret+=query(L,R,rson);
    }
    return ret;
}

int main()
{
    int i,j,n,m,q,wen,jian;
    while(scanf("%d%d%d",&n,&m,&q)!=EOF)
    {
        mem(add,0);
        build(1,n,1);
        for(i=1;i<=q;i++)
        {
    
            scanf("%d",&wen);
            printf("%d\n",query(wen,wen+m-1,1,n,1));
            update(wen,wen+m-1,-1,1,n,1);
        }
    }
    return 0;
}

 

FZU 2171 防守阵地 II,布布扣,bubuko.com

FZU 2171 防守阵地 II

标签:des   style   blog   color   os   io   数据   for   

原文地址:http://www.cnblogs.com/sola1994/p/3900383.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!