FZU 2171 防守陣地 II

來源:互聯網
上載者:User

標籤: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|1using 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;}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.