Problem 2171 防守阵地 II

Accept: 31    Submit: 112
Time Limit: 3000 mSec    Memory Limit : 32768 KB

 Problem 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)

对于30%的数据1<=M,N,Q<=1000。

 Output

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

 Sample Input

5 3 3
2 1 3 1 4
1
2
3

 Sample Output

6
3
5
 
 
 #include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdlib>
#include<cstdlib>
using namespace std; int date[];
struct node
{
int l,r;
int color;
int len;
int sum;
}f[*];
void build(int l,int r,int n)
{
int mid=(l+r)/;
f[n].l=l;
f[n].r=r;
f[n].color=;
f[n].len=f[n].r-f[n].l+;
if(l==r){
f[n].sum=date[l];
return;
}
build(l,mid,n*);
build(mid+,r,n*+);
f[n].sum=f[n*].sum+f[n*+].sum;
}
void pudown(int n)
{
f[n*].color+=f[n].color;
f[n*+].color+=f[n].color;
f[n].color=; if(f[n*].l==f[n*].r && f[n*].color>)
{
f[n*].sum-=f[n*].color;
f[n*].color=;
}
if(f[n*+].l==f[n*+].r && f[n*+].color>)
{
f[n*+].sum-=f[n*+].color;
f[n*+].color=;
}
}
int query(int l,int r,int n)
{
int mid=(f[n].l+f[n].r)/;
int tmp;
if(f[n].l==l && f[n].r==r)
{
return f[n].sum-f[n].len*f[n].color;
}
if(f[n].color!=)
pudown(n);
if(mid>=r)
tmp = query(l,r,n*);
else if(mid<l)
tmp = query(l,r,n*+);
else{
tmp = query(l,mid,n*)+query(mid+,r,n*+);
}
return tmp;
}
void update(int l,int r,int n)
{
int mid=(f[n].l+f[n].r)/;
if(f[n].l==l && f[n].r==r)
{
f[n].color++;
return;
}
if(mid>=r)
update(l,r,n*);
else if(mid<l)
update(l,r,n*+);
else
{
update(l,mid,n*);
update(mid+,r,n*+);
}
f[n].sum=f[n*].sum-f[n*].color*f[n*].len + f[n*+].sum-f[n*+].len*f[n*+].color;
}
int main()
{
int n,m,q,k,i,l,r;
while(scanf("%d%d%d",&n,&m,&q)>)
{
for(i=;i<=n;i++)
scanf("%d",&date[i]);
build(,n,);
while(q--)
{
scanf("%d",&l);
r=l+m-;
k=query(l,r,);
update(l,r,);
printf("%d\n",k);
}
}
return ;
}

fzu 2171 防守阵地 II的更多相关文章

  1. FZU Problem 2171 防守阵地 II (线段树区间更新模板题)

    http://acm.fzu.edu.cn/problem.php?pid=2171 成段增减,区间求和.add累加更新的次数. #include <iostream> #include ...

  2. FZU 2168 防守阵地 I(公式推导)(经典)(中等)

    Problem 2168 防守阵地 I Accept: 377    Submit: 1280 Time Limit: 3000 mSec    Memory Limit : 32768 KB  Pr ...

  3. FZU 2168 防守阵地 I

    Problem Description 部队中共有N个士兵,每个士兵有各自的能力指数Xi,在一次演练中,指挥部确定了M个需要防守的地点,按重要程度从低到高排序,依次以数字1到M标注每个地点的重要程度, ...

  4. FZU2171:防守阵地 II(线段树)

     Problem Description 部队中总共同拥有N个士兵,每一个士兵有各自的能力指数Xi.在一次演练中,指挥部确定了M个须要防守的地点,指挥部将选择M个士兵依次进入指定地点进行防守任务.获得 ...

  5. FZU 2168 防守阵地 I(前n项和的前n项和)

    这是一道很容易超时的题,我超了n次了,后来队友提示我才想到,bigsum ! ! ! !就是前n项和的前n项和 #include<iostream> #include<cstdio& ...

  6. 福州大学 Problem 2168 防守阵地 I

    http://acm.fzu.edu.cn/problem.php?pid=2168 最重要的是 dp[k]=dp[k-1]-ans[k-1]+x[i]*m; ans[k-1]是m个数求和.  Pro ...

  7. FZU2168——防守阵地 I——————【找规律或前缀和】

    防守阵地 I Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  8. FZU_Problem 2168 防守阵地 I

    Problem 2168 防守阵地 I Accept: 128 Submit: 392 Time Limit: 3000 mSec Memory Limit : 32768 KB Problem De ...

  9. FZU Problem 2168 防守阵地 I

    http://acm.fzu.edu.cn/problem.php?pid=2168 题目大意: 给定n个数和m,要求从n个数中选择连续的m个,使得a[i]*1+a[i+1]*2+--a[i+m]*m ...

随机推荐

  1. oracle触发器书写方法

    CREATE SEQUENCE 序列名[INCREMENT BY n] --每次加几[START WITH n] --序列从几开始[{MAXVALUE/ MINVALUE n|NOMAXVALUE}] ...

  2. C++之路进阶——codevs1285(宠物收养所)

    1285 宠物收养所  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description 最近,阿Q开了一间宠物收养所.收养所提供两种服 ...

  3. linux环境变量与本地变量

    两者不同的是. 环境变量可以在shell的子进程中使用, 而本地变量不同. 每当连接上服务器时,服务器就会通过帐号密码运行一个SHELL,我们所做的工作都在这个SHELL上,特殊方法除外(如,守护进程 ...

  4. 从一个小项目看return 引用 重载运算符

    #ifndef _ARRAY_H_ #define _ARRAY_H_ class Array { private: int mLength; int* mSpace; public: Array(i ...

  5. HDU 4833 Best Financing(DP)(2014年百度之星程序设计大赛 - 初赛(第二轮))

    Problem Description 小A想通过合理投资银行理财产品达到收益最大化.已知小A在未来一段时间中的收入情况,描述为两个长度为n的整数数组dates和earnings,表示在第dates[ ...

  6. docker gitlab

    Alternatively, you can manually launch the gitlab container and the supporting postgresql and redis ...

  7. 安装Elasticsearch,Logstash,Kibana(5.0.1-mac版)

    安装Elasticsearch 1.下载https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.0.1.tar.gz包 ...

  8. Android 屏幕滑动事件

    http://blog.csdn.net/iamfafa/article/details/6316062 Android里有两个类 android.view.GestureDetector andro ...

  9. zw版【转发·台湾nvp系列Delphi例程】HALCON Histogram

    zw版[转发·台湾nvp系列Delphi例程]HALCON Histogram unit Unit1;interfaceuses Windows, Messages, SysUtils, Varian ...

  10. 【海岛帝国系列赛】No.6 海岛帝国:战争前线

    50234237海岛帝国:战争前线 [试题描述] 总指挥官WHT出神入化的计谋虽然大有用武之地,但是聪明的恐怖分子们采取了城市核武器防御系统,可以有效地抵制WHT的炸弹.YSF对此头痛不已,因此 召开 ...