首页 > 其他分享 >Educational Codeforces Round 110 (Rated for Div. 2) D

Educational Codeforces Round 110 (Rated for Div. 2) D

时间:2022-10-31 11:55:41浏览次数:56  
标签:Educational Rated -- Codeforces else int pos

D. Playoff Tournament

观察完题 发现没改变一个 只会修改自己及以上的权值
所以我们直接暴力qlogn
但是这个题恶心的就是他那个是倒着给的
我们要reverse一遍
注意这时候因为反了一遍 左右子树也会反

#include <bits/stdc++.h>
using namespace std;
const int N = (1<<18)+10;
const int M = 998244353;
const int mod = 1e9+7;
#define int long long
int up(int a,int b){return a<0?a/b:(a+b-1)/b;}
#define endl '\n'
#define all(x) (x).begin(),(x).end()
#define YES cout<<"YES"<<endl;
#define NO cout<<"NO"<<endl;
#define _ 0
#define pi acos(-1)
#define INF 0x3f3f3f3f3f3f3f3f
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);
string s;
int n,a[N];
void dfs(int pos){
    if(pos==0)return;
    if(s[pos]=='?')a[pos]=a[pos<<1|1]+a[pos<<1];
    else if(s[pos]=='1')a[pos]=a[pos<<1];
    else a[pos]=a[pos<<1|1];
    dfs(pos>>1);
}
void solve(){
    cin>>n>>s;std::reverse(s.begin(), s.end());s=")"+s;
    n=(1<<n)-1;
    for(int i=n;i>=1;i--){
        if((i<<1)>n){
            (s[i]=='?')?a[i]=2:a[i]=1;
        }else{
            if(s[i]=='?')a[i]=a[i<<1]+a[i<<1|1];
            else if(s[i]=='1')a[i]=a[i<<1];
            else a[i]=a[i<<1|1];
        }
    }
    int q;cin>>q;
    while(q--){
        int pos;char x;cin>>pos>>x;
        pos=n-pos+1;
        if((pos<<1)>n){
            if(x=='?')a[pos]=2;
            else a[pos]=1;
        }else{
            if(x=='?')a[pos]=a[pos<<1|1]+a[pos<<1];
            else if(x=='1')a[pos]=a[pos<<1];
            else a[pos]=a[pos<<1|1];
        }
        dfs(pos>>1);
        s[pos]=x;
        cout<<a[1]<<endl;
    }
}
signed main(){
    fast
    int t;t=1;//cin>>t;
    while(t--) {
        solve();
    }
    return ~~(0^_^0);
}

标签:Educational,Rated,--,Codeforces,else,int,pos
From: https://www.cnblogs.com/ycllz/p/16843800.html

相关文章

  • codeforces 1734C、1733D1、1733C、1730C、1729D
    1、1734CRemovingSmallestMultiples题意:给予你一个数组S,其中包含前n个正整数你可以在S上执行以下操作任多次(包含0次):1、选择一个正整数i,(1<=k<=n),并且使得数组S中......
  • Codeforces Round #826 (Div. 3)
    题目链接CodeforcesRound#826(Div.3)F.Multi-ColoredSegmentsMulti-ColoredSegments题面翻译给定一维数轴上\(n\)条线段,每条线段都有给定的颜色\(c_i\)。对......
  • Codeforces Round #831 (Div. 1 + Div. 2) A-E
    比赛链接A题解知识点:数学。\(2\)特判加\(7\),其他加\(3\)直接偶数。时间复杂度\(O(1)\)空间复杂度\(O(1)\)代码#include<bits/stdc++.h>#definelllonglo......
  • Codeforces Round #828 (Div. 3)
    题目链接CodeforcesRound#828(Div.3)DivisibleNumbers(hardversion)题目描述给出四个整数\(a,b,c,d\),请你构造一对整数\((x,y)\),满足:\(a<x\leqc......
  • Codeforces Round #831 (Div. 1 + Div. 2)
    CodeforcesRound#831(Div.1+Div.2)1.Problem-D-Codeforces首先是一个结论就是如果除了起点终点以外你发现只要是还多一个格子你是可以把所有牌都任意移动的。......
  • Codeforces Round #831 (Div. 1 + Div. 2) E
    E.HangingHearts我们观察每一个节点它可以由其子节点的所有长链来构造还有就是直接可以由自己构成的一条长链所以对于每一个节点我们的答案就是max(加上自己的最长链......
  • Codeforces Round #831 (Div. 1 + Div. 2)
    A.FactoriseN+M题意:给出一个质数,求另一个质数,使得两个数之和不是质数。解:把那个质数再输出一遍就行了。B.JumboExtraCheese2题意:给出一些长方形,按照以下规则把长......
  • Codeforces Round #750 (Div. 2) F1
    F1.KorneyKorneevichandXOR(easyversion)我们观察题意发现我们需要找的是一个上升序列我们回忆上升序列的状态设计dp[i]表示第i个作为结尾最长的序列长度是多少......
  • Educational Codeforces Round 93 (Rated for Div. 2) D
    D.ColoredRectangles考虑数据范围显然可以n3dp我们发现dp转移时不是特别好枚举所以我们选择记忆化搜索打完你们可能会发现过不去第三个样例显然我们应该sort一遍......
  • Codeforces Round #827 (Div. 4) A-G
    比赛链接A题解知识点:模拟。时间复杂度\(O(1)\)空间复杂度\(O(1)\)代码#include<bits/stdc++.h>#definelllonglongusingnamespacestd;boolsolve(){......