2015多校第7场 HDU 5372 Segment Game 树状数组,思维
来源:互联网 发布:程序员需要考什么证书 编辑:程序博客网 时间:2024/06/07 12:05
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5372
题意:给你n次操作,每次增加线段或者删除第i次增加操作中增加的线段,问你每次增加操作中,所增加的线段会覆盖多少条完整的线段。
解法:对于新插入的线段,查询有多少个线段左端点大于等于该线段的左端点。 再查询有多少个线段的右端点大于该线段右端点, 两者之差就是答案。用两个树状数组搞定。时间复杂度nlogn
#include <bits/stdc++.h>using namespace std;const int maxn=4e5+10;int a[maxn],b[maxn],op[maxn],c[2][maxn];vector<int>v;int getid(int x){ return lower_bound(v.begin(),v.end(),x)-v.begin()+1;}inline lowbit(int x){ return x&-x;}void add(int x, int v, int o){ while(x<maxn){ c[o][x]+=v; x+=lowbit(x); }}int query(int x, int o){ int ret=0; while(x){ ret += c[o][x]; x-=lowbit(x); } return ret;}int main(){ int n,ks=0; while(~scanf("%d", &n)) { int clk=0; for(int i=1; i<=n; i++){ scanf("%d %d", &op[i], &a[i]); if(op[i]==0){ b[i]=a[i]+(++clk); v.push_back(a[i]); v.push_back(b[i]); } } sort(v.begin(),v.end()); v.erase(unique(v.begin(),v.end()),v.end()); memset(c,0,sizeof(c)); clk = 1; printf("Case #%d:\n", ++ks); for(int i=1; i<=n; i++){ if(op[i]==0){ int l=getid(a[i]),r=getid(b[i]); printf("%d\n", query(r,1)-query(l-1,0)); a[clk]=l; b[clk++]=r; add(l,1,0); add(r,1,1); } else{ add(a[a[i]], -1, 0); add(b[a[i]], -1, 1); } } } return 0;}
阅读全文
0 0
- 2015多校第7场 HDU 5372 Segment Game 树状数组,思维
- HDU 5372 Segment Game 树状数组
- 【树状数组】 HDU 5372 Segment Game
- hdu 5372 Segment Game(树状数组)
- HDU 5372 - Segment Game(树状数组)
- 【HDU 5372】Segment Game(树状数组)
- HDU 5372 Segment Game 树状数组
- HDU 5372 Segment Game(树状数组)
- [HDU 5372] Segment Game (树状数组)
- [树状数组] hdu 5372 Segment Game
- 2015多校第7场 HDU 5371 Segment Game 思维,Manacher算法
- HDU 5372 Segment Game (MUT#7 树状数组+离散化)
- 多校第七场 1004 hdu 5372 Segment Game(树状数组)
- hdu 5372 Segment Game 2015多校联合训练赛#7 树状数组
- hdu-5372 Segment Game(离散树状数组)(2015多校contest 7)
- Segment Game (hdu 5372 树状数组+离散化)
- hdu 5372 Segment Game(树状数组+离散化)
- hdu 5372 Segment Game (树状数组+离散化)
- 数组是什么?怎样在 PHP 中创建数组?
- git diff 查看文件修改
- 百练1035:拼写检查题解
- Linux下Shell实现当文件大于某size时候删除功能
- iOS-使用UIControl封装@"上下文"控件
- 2015多校第7场 HDU 5372 Segment Game 树状数组,思维
- sudo 找不到 (-bash sudo : command not found)
- 微服务之服务发现的可行方案以及实践案例(四)
- 【SoapUI】接口测试之post上传文件方法思路
- CC2640R2F BLE5.0 BLE Device Monitor用户指南
- 微信小程序--鼠标事件 & 点击事件返回值的target分析
- ora-01034和ora-27101 续
- 转义字符在字符串中的运用
- jar包修改并重新打包