D. Playoff Tournament
D. Playoff Tournament
Example
inputCopy
3
0110?11
6
5 1
6 ?
7 ?
1 ?
5 ?
1 1
outputCopy
1
2
3
3
5
4
线段树nlogn
遇到 ? 该节点的值为左子树加右子树
遇到 1 该节点的值为右子树
遇到 0 该节点的值为左子树
#include<bits/stdc++.h>
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const int maxn=(1<<18)+100;
int a[maxn];
char s[maxn];
map<int,int>mp,mp2;//映射:最后一场比赛对应线段树节点1 最后两场对应 2 3 以此类推
struct node
{int l,r,sum;char op;
} t[maxn*4];
void build(int l,int r,int k)
{t[k].l=l;t[k].r=r;t[k].op=s[mp2[k]];if(l==r){t[k].sum=1;return ;}int mid=(l+r)>>1;build(l,mid,k<<1);build(mid+1,r,k<<1|1);if(t[k].op=='?')t[k].sum=t[k<<1|1].sum+t[k<<1].sum;if(t[k].op=='1')t[k].sum=t[k<<1|1].sum;if(t[k].op=='0')t[k].sum=t[k<<1].sum;
}
signed main()
{IOSint k,q;cin>>k;;cin>>(s+1);cin>>q;int n=(1<<k)-1;int cnt=1;int num=0;int sm=1;while(sm!=n){for(int i=n-sm+1; i<=n-sm+1+cnt-1; i++){mp[i]=++num;mp2[num]=i;}cnt=cnt*2;sm+=cnt;}for(int i=n-sm+1; i<=n-sm+1+cnt-1; i++){mp[i]=++num;mp2[num]=i;}build(1,n+1,1);//for(int i=1;i<=7;i++)cout<<t[i].sum<<" ";//for(int i=8;i<=15;i++)cout<<t[i].sum<<" ";while(q--){int id;string str;cin>>id>>str;s[id]=str[0];t[mp[id]].op=str[0];int p=mp[id];while(p!=1){if(t[p].op=='?')t[p].sum=t[p<<1|1].sum+t[p<<1].sum;if(t[p].op=='1')t[p].sum=t[p<<1|1].sum;if(t[p].op=='0')t[p].sum=t[p<<1].sum;p=p>>1;}if(t[p].op=='?')t[p].sum=t[p<<1|1].sum+t[p<<1].sum;if(t[p].op=='1')t[p].sum=t[p<<1|1].sum;if(t[p].op=='0')t[p].sum=t[p<<1].sum;cout<<t[1].sum<<"\n";}
}
D. Playoff Tournament相关推荐
- 【平衡二叉树】D. Playoff Tournament
D. Playoff Tournament 题意:有2^k个队伍参加一场比赛,队伍之间按序号两两比赛 给你一个字串s,代表每场比赛的胜负条件,满足 当s[i] 为0时,下标小的队伍获胜 当s[i] 为 ...
- Educational Codeforces Round 110 (Rated for Div. 2)D Playoff Tournament
题目大意: 给你一个k,一共有k+1支队伍,按编号顺序进行k次淘汰赛 再给你一串字符串代表每个比赛的结果 如果是1代表编号大的那支队伍赢 如果是0代表编号小的那支队伍赢 如果是?代表可能编号大的赢也可 ...
- CodeForces 1535D : Playoff Tournament 二叉树
传送门 题意 分析 模拟一颗二叉树,找到待修改的节点然后向上维护即可 代码 #pragma GCC optimize(3) #include <bits/stdc++.h> #define ...
- Educational Codeforces Round 110 (Rated for Div. 2) D. Playoff Tournament
传送门 题意:给你含有2^k-1个节点的满二叉树,对于叶子节点权值:'?' = 2, '1' = 1, '0' = 1; 对于非叶子节点 '?' = lsn + rsn, '1' = rsn, '0' ...
- CF1535D. Playoff Tournament(线段树维护)
题目链接 题意: 前去洛谷自行观看吧链接放上了:https://www.luogu.com.cn/problem/CF1535D 分析: 正向并不能看出来什么,反向的话就是构成了一颗线段树,直接维护这 ...
- Educational Codeforces Round 110 div.2 A~F题解
视频讲解:BV1254y137Rn A. Fair Playoff 题目大意 有 444 位选手参加比赛,第 iii 位选手的水平为 si(1≤si≤100)s_i(1 \leq s_i \leq 1 ...
- 大一下第十四周学习笔记
周二 6.1(dp) 这周开始刷kuangbin基础dp专题.昨天写高数作业去了没训练 A - Max Sum Plus Plus(dp空间与时间优化) 这题的dp方程我写出来了,但是感觉空间也炸时间 ...
- @UPC8377 @ACM-ICPC-2018-ASIA YOKAHAMA REGIONAL D: Playoff (DFS)
Playoff 时间限制: 5 Sec 内存限制: 128 MB 提交: 56 解决: 13 [提交] [状态] [讨论版] [命题人:admin] 题目描述 The Minato Mirai F ...
- 8377: Playoff
8377: Playoff 时间限制: 2 Sec 内存限制: 128 MB 提交: 99 解决: 28 [提交] [状态] [讨论版] [命题人:admin] 题目描述 The Minato M ...
最新文章
- MPB:南农韦中组-​铁载体对根际细菌互作效应的介导作用研究方法
- 网络天才网页中文版_LVMH 旗下奢侈品电商 24S 的中文版正式上线,还有带来“双 11”优惠...
- SpringMVC:后台将List转为Json,传值到页面
- java读取json数据并解析输出对象
- 算法与数据结构(part2)--Python内置类型性能分析
- apache OFBiz的安装
- C#动态操作DataTable(新增行、列、查询行、列等)
- 浅谈 C++ 中的 new/delete 和 new[]/delete[]
- AI算法连载22:统计之边际概率推断
- pe常用软件_装机不求人之打造自己的全功能PE系统维护优盘
- vue list数组合并和插入数据
- Caffe学习:使用pycaffe生成mean_file.py文件
- IDEA中创建maven web的详细部署
- android 注册多个服务器,android-根据服务器响应创建多个处理程序并...
- Dubbo底层源码解析
- Mac Os 安装配置Maven以及IntelliJ IDEA Maven使用
- html页面360极速浏览器不兼容,html页面在360极速浏览器样式不兼容
- Vue 记录一次安装插件引起的项目崩溃(This is probably not a problem with npm,there is likely additional logging outp)
- vue3 script setup写法
- 设置柱状图每根柱子的颜色
热门文章
- 使用js判断当前使用的浏览器
- apache 禁用rc4_(转载)Tomcat禁用SSLv3和RC4算法
- mysql 组内分组_[MySQL] group by 分组并进行组内排序取得最新一条
- 锐捷交换机显示服务器,锐捷交换机查看时间命令
- 华清远见-重庆中心-前端阶段技术总结
- http://www.xueh188.top/index.php/archives/40/
- 征信小知识︱逾期记录怎么清除,能“铲单”吗?
- 微博营销技巧之软文写作
- 自己为孩子开发的字帖工具
- GeoHash 算法