【树状数组区间修改单点查询】HDU 4031 Attack
2017-08-26 22:15
330 查看
http://acm.hdu.edu.cn/showproblem.php?pid=4031
【题意】
有一个长为n的长城,进行q次操作,d为防护罩的冷却时间,Attack表示区间a-b的墙将在1秒后受到攻击,
询问表示计算第a块墙受到攻击的次数,被防护罩抵消的不算
【思路】
总的攻击次数-防护罩抵消的次数
总的攻击次数可以树状数组维护
防护罩抵消的模拟
【AC】
View Code
【题意】
有一个长为n的长城,进行q次操作,d为防护罩的冷却时间,Attack表示区间a-b的墙将在1秒后受到攻击,
询问表示计算第a块墙受到攻击的次数,被防护罩抵消的不算
【思路】
总的攻击次数-防护罩抵消的次数
总的攻击次数可以树状数组维护
防护罩抵消的模拟
【AC】
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 int n,q,t; 5 const int maxn=2e4+2; 6 int a[maxn]; 7 int l[maxn],r[maxn]; 8 int cur[maxn]; 9 int sum[maxn]; 10 int tree[maxn]; 11 int cnt; 12 13 void init() 14 { 15 memset(tree,0,sizeof(tree)); 16 cnt=0; 17 memset(l,0,sizeof(l)); 18 memset(r,0,sizeof(r)); 19 memset(cur,0,sizeof(cur)); 20 memset(sum,0,sizeof(sum)); 21 } 22 int lowbit(int x) 23 { 24 return x&-x; 25 } 26 void add(int k,int x) 27 { 28 while(k<=n) 29 { 30 tree[k]+=x; 31 k+=lowbit(k); 32 } 33 } 34 int query(int k) 35 { 36 int ans=0; 37 while(k) 38 { 39 ans+=tree[k]; 40 k-=lowbit(k); 41 } 42 return ans; 43 } 44 int solve(int x) 45 { 46 int i=cur[x]; 47 while(i<cnt) 48 { 49 if(x>=l[i]&&x<=r[i]) 50 { 51 sum[x]++; 52 i+=t; 53 cur[x]=i; 54 } 55 else 56 { 57 i++; 58 } 59 } 60 return sum[x]; 61 } 62 int main() 63 { 64 int T; 65 scanf("%d",&T); 66 int cas=0; 67 while(T--) 68 { 69 init(); 70 scanf("%d%d%d",&n,&q,&t); 71 printf("Case %d:\n",++cas); 72 char op[10]; 73 while(q--) 74 { 75 scanf("%s",op); 76 if(op[0]=='A') 77 { 78 int x,y; 79 scanf("%d%d",&x,&y); 80 l[cnt]=x;r[cnt++]=y; 81 add(x,1); 82 add(y+1,-1); 83 } 84 else 85 { 86 int x; 87 scanf("%d",&x); 88 int ans=query(x); 89 int delta=solve(x); 90 ans-=delta; 91 printf("%d\n",ans); 92 } 93 } 94 } 95 return 0; 96 }
View Code
相关文章推荐
- 【树状数组区间修改单点查询+分组】HDU 4267 A Simple Problem with Integers
- UVALive 4730 - Kingdom 树状数组区间修改单点查询
- [模板]树状数组(区间修改单点查询)
- 树状数组进阶(区间修改+单点查询)
- hdu p1556 树状数组的区间修改,单点查询。
- BZOJ-1036: [ZJOI2008]树的统计Count (树链剖分 线段树 单点修改 区间查询 入门题)
- hdu 4970 Killing Monsters 【树状数组(区间修改,点查询)】
- (HDU 1754)I Hate It 线段树区间查询入门,单点修改
- HUST——1106xor的难题之二(异或树状数组单点修改和区间查询)
- 【codevs1081】【树状数组】区间修改 单点查询
- 树状数组单点修改区间查询
- Wikilo 1191线段树区间修改单点查询
- 三维树状数组(区间更新,单点查询)POJ
- 【BZOJ 3110】 [Zjoi2013]K大数查询 整体二分+树状数组区间修改
- 01变换 二维树状数组+区间更新,单点查询 poj 2155 Matrix
- 【黑科技】用树状数组解决区间修改查询问题
- CS Academy Round #30 (Div. 2 only) C.Constant Sum(树状数组,区间修改,单点查询模板)
- 线段树——区间查询+单点修改
- POJ2155 Matrix(二维树状数组||区间修改单点查询)
- 主席树(区间查询第k小数+单点修改)HDU2665