成功袭击次数=所有袭击次数-成功防守次数

需要一个辅助pre来记录上一次袭击成功什么时候,对于每个查询,从上一次袭击成功开始,每隔t更新一次。

感觉这样做最坏时间复杂度是O(n^2),这里 说是O(q)*O(q/t)log(n),应该是超时边缘。

能AC或许因为数据不强。

PS.初始化的时候直接memset会超时,每次根据N的大小build线段树,memset也根据N的大小来就能AC。

#include <cstdio>
#include <cstring>
#include <cstdlib> #define lson l, m, rt << 1
#define rson m + 1, r, rt << 1 | 1
#define lc rt << 1
#define rc rt << 1 | 1 using namespace std; const int MAXN = ; struct node
{
int l, r;
}; node D[MAXN];
int sum[ MAXN << ];
int flag[ MAXN << ];
int pre[ MAXN ];
int defen[MAXN];
int N, Q, t; void PushDown( int rt, int m )
{
if ( flag[rt] )
{
flag[lc] += flag[rt];
flag[rc] += flag[rt];
sum[lc] += flag[rt]*(m-(m>>));
sum[rc] += flag[rt]*(m>>);
flag[rt] = ;
}
return;
} void update( int L, int R, int l, int r, int rt )
{
if ( L <= l && r <= R )
{
sum[rt] += ;
flag[rt] += ;
return;
}
PushDown(rt, r - l + );
int m = ( l + r ) >> ;
if ( L <= m ) update( L, R, lson );
if ( R > m ) update( L, R, rson );
return;
} int query( int L, int l, int r, int rt )
{
if ( L == l && r == L ) return sum[rt];
PushDown(rt, r - l + );
int m = ( l + r ) >> ;
if ( L <= m ) return query( L, lson );
else return query( L, rson );
} void build( int l, int r, int rt )
{
flag[rt] = sum[rt] = ;
if ( l == r ) return;
int m = ( l + r ) >> ;
build( lson );
build( rson );
return;
} int main()
{
int T, cas = ;
scanf( "%d", &T );
char str[];
while( T-- )
{
scanf( "%d%d%d", &N, &Q, &t );
build( , N, );
memset( defen, , sizeof(int)*(N+) );
memset( pre, , sizeof(int)*(N+) );
memset( D, , sizeof(D[])*(N+) ); int cnt = ;
printf( "Case %d:\n", ++cas );
for ( int i = ; i < Q; ++i )
{
scanf( "%s", str );
if ( str[] == 'A' )
{
scanf("%d%d", &D[cnt].l, &D[cnt].r );
update( D[cnt].l, D[cnt].r, , N, );
++cnt;
}
else
{
int a;
scanf( "%d", &a );
for ( int i = pre[a]; i <= cnt; )
{
if ( a >= D[i].l && a <= D[i].r )
{
pre[a] = i + t;
++defen[a];
i += t;
}
else ++i;
}
//printf("qry=%d def=%d\n", query(a, 1, N, 1 ), defen[a] );
printf( "%d\n", query(a, , N, ) - defen[a] );
}
//printf("***qry=%d def=%d\n", query(5, 1, N, 1 ), defen[5] );
}
}
return ;
}

HDU 4031 Attack (线段树)的更多相关文章

  1. hdu 4031 attack 线段树区间更新

    Attack Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)Total Subm ...

  2. hdu 4031 Attack 线段树

    题目链接 Attack Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)Total ...

  3. hdu 4288 离线线段树+间隔求和

    Coder Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  4. hdu 3016 dp+线段树

    Man Down Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  5. HDU 4031 Attack(线段树/树状数组区间更新单点查询+暴力)

    Attack Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Sub ...

  6. HDU 4031 Attack(离线+线段树)(The 36th ACM/ICPC Asia Regional Chengdu Site —— Online Contest)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4031 Problem Description Today is the 10th Annual of ...

  7. hdu 5480 Conturbatio 线段树 单点更新,区间查询最小值

    Conturbatio Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=54 ...

  8. HDU 5877 dfs+ 线段树(或+树状树组)

    1.HDU 5877  Weak Pair 2.总结:有多种做法,这里写了dfs+线段树(或+树状树组),还可用主席树或平衡树,但还不会这两个 3.思路:利用dfs遍历子节点,同时对于每个子节点au, ...

  9. HDU 3308 LCIS (线段树区间合并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 题目很好懂,就是单点更新,然后求区间的最长上升子序列. 线段树区间合并问题,注意合并的条件是a[ ...

随机推荐

  1. first 和firstordefault的用法 简介

    https://www.cnblogs.com/1312mn/p/9212325.html

  2. Java 序列化对象工具类

    SerializationUtils.java package javax.utils; import java.io.ByteArrayInputStream; import java.io.Byt ...

  3. 奇异值分解(SVD)和最小二乘解在解齐次线性超定方程中的应用

    奇异值分解,是在A不为方阵时的对特征值分解的一种拓展.奇异值和特征值的重要意义相似,都是为了提取出矩阵的主要特征. 对于齐次线性方程 A*X =0;当A的秩大于列数时,就需要求解最小二乘解,在||X| ...

  4. visual attention

    The visual attention mechanism may have at least the following basic components [Tsotsos, et. al. 19 ...

  5. 记一次EBS正式环境补丁安装的过程

    因菏泽能源上线需求,需要在8009上修复集团8000环境上已经修复的所有补丁程序,修复前做应用及数据库层备份,完成修复后解决并发管理器无法启动的问题.此为概述. 应用层备份 应用层的备份采用直接压缩备 ...

  6. activemq启动闪退/失败 (Illegal character in hostname at index 5: ws://****:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600)

    java.net.URISyntaxException: Illegal character in hostname at index 5: ws://****:61614?maximumConnec ...

  7. redis 面试题

    https://www.cnblogs.com/ftl1012/p/redisExam.html 1. 使用Redis有哪些好处? (1) 速度快,因为数据存在内存中,类似于HashMap,HashM ...

  8. mongdb安装配置

    一.先登录Mongodb官网https://www.mongodb.com/download-center#community 下载   安装包.32.64位的都行. 或者查看我的百度云(使用win7 ...

  9. 华为ensp工具栏丢失解决方法

    电脑是win8系统 不知道什么原因,华为模拟器的工具栏神奇的消失了,感觉很郁闷,每次要写字的时候都找不到在哪里(菜单里也没有),于是在官方论坛里面找了一下终于找出原因了. 关闭ensp,点击属性,进入 ...

  10. 4、spring boot 配置文件之profile

    Profile  1.多Profile文件 我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml 默认使用application.prop ...