hdu 1166 敌兵布阵(cdq分治)
来源:互联网 发布:淘宝我的空间3d形象 编辑:程序博客网 时间:2024/06/05 10:43
第一次写cdq分治。
感觉这个题就是按时间递归分治,然后通过每次计算左区间内(时间早)操作对右区间(时间晚)中的查询结果的影响。
代码:
#include <bits/stdc++.h>using namespace std;const int maxn=5e5+5;struct node{ int inde; int val; int type; operator < (const node &a)const { return a.inde==inde?type<a.type:inde<a.inde; }}op[maxn], tmp[maxn];int ans[maxn];void cdq(int l, int r){ if(r-l<=1)return;// printf("%d %d\n", l, r); int mid=(r+l)>>1; cdq(l, mid); cdq(mid, r); int sum=0, o=0, q=l, p=mid; while(q<mid && p<r) { if(op[q]<op[p]) { if(op[q].type==1 || op[q].type==2) { sum+=op[q].val; } tmp[o++]=op[q++]; } else { if(op[p].type==3) { ans[op[p].val]-=sum; } else if(op[p].type==4) {// printf("%d\n", op[p].val); ans[op[p].val]+=sum; } tmp[o++]=op[p++]; } } while(q<mid) { tmp[o++]=op[q++]; } while(p<r) { if(op[p].type==3) { ans[op[p].val]-=sum; } else if(op[p].type==4) {// printf("%d\n", op[p].val); ans[op[p].val]+=sum; } tmp[o++]=op[p++]; } for(int i=0; i<o; i++)op[i+l]=tmp[i]; return;}int main(){ int e=1, t; cin>>t; int n, i, j, qid=0, l, r; char str[11]; while(t--) { memset(ans, 0, sizeof ans); qid=0; int aid=0; scanf("%d", &n); for(i=1; i<=n; i++) { scanf("%d", &op[qid].val); op[qid].type=1; op[qid].inde=i; qid++; } while(~scanf("%s", str)) { if(str[0]=='E') { break; } if(str[0]=='Q') { scanf("%d%d", &l, &r); op[qid].inde=l-1; op[qid].val=aid; op[qid].type=3; qid++; op[qid].inde=r; op[qid].val=aid++; op[qid].type=4; qid++; } else if(str[0]=='A') { scanf("%d%d", &l, &r); op[qid].inde=l; op[qid].val=r; op[qid].type=1; qid++; } else { scanf("%d%d", &l, &r); op[qid].inde=l; op[qid].val=-1*r; op[qid].type=2; qid++; } } cdq(0, qid); printf("Case %d:\n", e++); for(i=0; i<aid; i++) { printf("%d\n", ans[i]); } } return 0;}
阅读全文
1 0
- hdu 1166 敌兵布阵(cdq分治)
- hdu 1166 敌兵布阵(cdq分治)
- HDU1166:敌兵布阵(CDQ分治)
- hdu1166 敌兵布阵(CDQ分治)
- HDU 1166 敌兵布阵
- HDU 1166 敌兵布阵
- hdu 1166 敌兵布阵
- hdu 1166 敌兵布阵
- HDU 1166 敌兵布阵
- hdu 1166 敌兵布阵
- hdu 1166 敌兵布阵
- hdu 1166敌兵布阵
- hdu 1166 敌兵布阵
- hdu 1166 敌兵布阵
- HDU 1166 敌兵布阵
- hdu 1166 敌兵布阵
- hdu 1166 敌兵布阵
- HDU 1166 敌兵布阵
- DataTable数据覆盖之后无法跳到指定页面渲染的解决方法
- 序列化与反序列化
- 获取时间戳,转化时间字符串
- Eclipse Web 开发的使用
- Vue1.0过滤器
- hdu 1166 敌兵布阵(cdq分治)
- mac下如何安装python3.x
- Volley框架源码
- windows上解决git每次重复输入账号密码
- 个人笔记—C++删除指定路径文件实现
- Struts2常见的常量配置
- 使用SpringMVC进行数据的传送,数据来自mysql数据库 (1)没有使用hibernate
- 欢迎使用CSDN-markdown编辑器
- SQLServer性能调试开关