HDU 4031 Attack(离线+线段树)(The 36th ACM/ICPC Asia Regional Chengdu Site —— Online Contest)
During the war, it is very important to understand the situation of both self and the enemy. So the commanders of American want to know how much time some part of the wall is successfully attacked. Successfully attacked means that the attack is not defended by the shield.
The first line of each test case is three integers, N, Q, t, the length of the wall, the number of attacks and queries, and the time each shield needs to cool down.
The next Q lines each describe one attack or one query. It may be one of the following formats
1. Attack si ti
Al Qaeda attack the wall from si to ti, inclusive. 1 ≤ si ≤ ti ≤ N
2. Query p
How many times the pth unit have been successfully attacked. 1 ≤ p ≤ N
The kth attack happened at the kth second. Queries don’t take time.
1 ≤ N, Q ≤ 20000
1 ≤ t ≤ 50
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std; const int MAXN = ;
const int MAXT = MAXN << ;
const int MAXP = ; struct Node {
int pos, op, time;
Node() {}
Node(int pos, int op, int time): pos(pos), op(op), time(time) {}
bool operator < (const Node &rhs) const {
return pos < rhs.pos;
}
}; vector<int> qtime[MAXN], qid[MAXN];
Node attack[MAXN * ];
int ans[MAXN];
int T, n, q, t, ncnt, atime; void init() {
for(int i = ; i <= n; ++i) qtime[i].clear(), qid[i].clear();
memset(ans, -, q * sizeof(int));
ncnt = atime = ;
} #define ll (x << 1)
#define rr (ll | 1)
#define mid ((l + r) >> 1)
int atk[MAXT][MAXP], empty[MAXT][MAXP];
int cnt[MAXN]; void update(int x) {
for(int i = ; i < t; ++i) {
int t = empty[ll][i];
atk[x][i] = atk[ll][i] + atk[rr][t];
empty[x][i] = empty[rr][t];
}
} void build(int x, int l, int r) {
if(l == r) {
atk[x][] = empty[x][] = cnt[l] = ;
for(int i = ; i < t; ++i)
atk[x][i] = , empty[x][i] = i - ;
} else {
build(ll, l, mid);
build(rr, mid + , r);
update(x);
}
} void modify(int x, int l, int r, int a, int b) {
if(a <= l && r <= b) {
atk[x][] = ; empty[x][] = cnt[a] ? t - : ;
for(int i = ; i < t; ++i)
atk[x][i] = cnt[a], empty[x][i] = i - ;
} else {
if(a <= mid) modify(ll, l, mid, a, b);
if(mid < b) modify(rr, mid + , r, a, b);
update(x);
}
} void modify(int pos) {
modify(, , atime, pos, pos);
} int query(int x, int l, int r, int a, int b, int e) {
if(a <= l && r <= b) {
return atk[x][e];
} else {
int res = query(ll, l, mid, a, b, e);
if(mid < b) res += query(rr, mid + , r, a, b, empty[ll][e]);
return res;
}
} int query(int pos) {
if(pos == ) return ;
return query(, , atime, , pos, );
} char s[]; int main() {
scanf("%d", &T);
for(int kase = ; kase <= T; ++kase) {
scanf("%d%d%d", &n, &q, &t);
init();
for(int i = , a, b; i < q; ++i) {
scanf("%s", s);
if(strcmp(s, "Attack") == ) {
scanf("%d%d", &a, &b);
atime++;
attack[ncnt++] = Node(a, , atime);
attack[ncnt++] = Node(b + , -, atime);
} else {
scanf("%d", &a);
qtime[a].push_back(atime);
qid[a].push_back(i);
}
}
sort(attack, attack + ncnt); build(, , atime);
int p = ;
for(int i = ; i <= n; ++i) {
while(p < ncnt && attack[p].pos == i) {
cnt[attack[p].time] += attack[p].op;
modify(attack[p++].time);
}
for(size_t k = ; k < qtime[i].size(); ++k)
ans[qid[i][k]] = query(qtime[i][k]);
} printf("Case %d:\n", kase);
for(int i = ; i < q; ++i)
if(ans[i] != -) printf("%d\n", ans[i]);
}
}
HDU 4031 Attack(离线+线段树)(The 36th ACM/ICPC Asia Regional Chengdu Site —— Online Contest)的更多相关文章
- HDU 4069 Squiggly Sudoku(DLX)(The 36th ACM/ICPC Asia Regional Fuzhou Site —— Online Contest)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4069 Problem Description Today we play a squiggly sud ...
- HDU 4064 Carcassonne(插头DP)(The 36th ACM/ICPC Asia Regional Fuzhou Site —— Online Contest)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4064 Problem Description Carcassonne is a tile-based ...
- HDU 4063 Aircraft(计算几何)(The 36th ACM/ICPC Asia Regional Fuzhou Site —— Online Contest)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4063 Description You are playing a flying game. In th ...
- hdu 5877 线段树(2016 ACM/ICPC Asia Regional Dalian Online)
Weak Pair Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- HDU 4291 A Short problem(2012 ACM/ICPC Asia Regional Chengdu Online)
HDU 4291 A Short problem(2012 ACM/ICPC Asia Regional Chengdu Online) 题目链接http://acm.hdu.edu.cn/showp ...
- HDU 5873 Football Games 【模拟】 (2016 ACM/ICPC Asia Regional Dalian Online)
Football Games Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- HDU 4031 Attack(线段树/树状数组区间更新单点查询+暴力)
Attack Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others) Total Sub ...
- HDU 4031 Attack (线段树)
成功袭击次数=所有袭击次数-成功防守次数 需要一个辅助pre来记录上一次袭击成功什么时候,对于每个查询,从上一次袭击成功开始,每隔t更新一次. 感觉这样做最坏时间复杂度是O(n^2),这里 说是O(q ...
- HDU 4729 An Easy Problem for Elfness(主席树)(2013 ACM/ICPC Asia Regional Chengdu Online)
Problem Description Pfctgeorge is totally a tall rich and handsome guy. He plans to build a huge wat ...
随机推荐
- 20145319 《java程序设计》课程总结
20145319 <Java程序设计>课程总结 读书笔记链接总结 - 20145319 第一周学习总结 - 20145319 第二周学习总结 - 20145319 第三周学习总结 - 20 ...
- mysql-zabbix-agent
使用Zabbix监控MySQL服务器方法 01/27/2014 从Zabbix 2.2开始,Zabbix官方已经支持了MySQL监控,但是MySQL监控默认是不可用的,需要经过额外的设置才可以使用.K ...
- qt如何实现一个渐隐窗口呢(开启的时候他是从上往下渐渐显示)
qt如何实现一个渐隐窗口呢?就是比如说开启的时候他是从上往下渐渐显示的,关闭的时候从下往上渐渐小时的http://stackoverflow.com/questions/19087822/how-to ...
- 软件的NABCD----安装部分
N:需求 有些软件安装需要很多的插件,很很多的安装步骤,甚至文件夹移动等麻烦的步骤 A:做法 做成一键安装的程序 B:好处 默认D盘安装,节省C盘空间,没有赘余插件,一键安装,省时省力. C:竞争 和 ...
- mac下配置和访问阿里云服务器(Ubuntu系统)
1.购买云服务器(http://www.aliyun.com/?spm=5176.3047821.1.1.vHFBuw) 注册帐号,在产品页面选择合适的服务器,进入详细页面选择配置,购买. 购买完成后 ...
- 获取设备的唯一标识uuid
摘自:http://blog.sina.com.cn/s/blog_5971cdd00102vqgy.html -(NSString*) uuid { CFUUIDRef puuid = CFUUID ...
- iOS Node Conflict svn冲突
当出现这个冲突时,应该是我add的文件,和同事处理的方法有冲突导致的. 这个的解决办法是:先revert这个文件,然后再update.
- 我的工具箱之Opera浏览器
下载地址:http://pan.baidu.com/s/1gdVQA11 刚出来时挺火的,后来有点渐趋式微了.
- opencv的高斯混合模型
http://blog.jasonding.top/2015/04/05/Machine%20Learning/%E3%80%90%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%8 ...
- Android各个版本 版本号对应关系表
Platform Version API Level VERSION_CODE Notes Android 5.0 21 LOLLIPOP Platform Highlights Android 4. ...