首页 > 其他分享 >CF 1872 E

CF 1872 E

时间:2023-09-08 13:12:03浏览次数:32  
标签:ty ll cin CF 1872 x0 x1 oplus

E. Data Structures Fan

这道题可以先对数组\(a\)进行异或前缀和操作,得到数组\(b\),并在初始情况下记录下所有\(s[i]\)为0/1的异或和为\(x0\),\(x1\),之后处理询问操作。

  • 当\(ty=1\)时,需要对\(s[i]\)(\(l≤i≤r\))进行反转,即让\(x0\)和\(x1\)对\(a[i]\)(\(l≤i≤r\))进行异或操作,即

\[x0= x0\oplus(b[r] \oplus b[l - 1]); \]

\[x1= x1\oplus(b[r] \oplus b[l - 1]); \]

  • 当\(ty=2\)时,输出\(x0\)或\(x1\)。

代码

#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef long long ll;
typedef pair<ll, ll> PII;

const ll N = 1e5 + 10;
ll t;
ll n, a[N], q;
ll b[N];
string s;

signed main()
{
    std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cin >> t;
    while(t--)
    {
        cin >> n;
        ll x0 = 0, x1 = 0;
        for(ll i = 1;i <= n;i++)
        {
            cin >> a[i];
            b[i] = b[i - 1] ^ a[i];
        }
        cin >> s;
        s = ' ' + s;
        for(ll i = 1;i <= n;i++)
        {
            if(s[i] == '0')
            {
                x0 ^= a[i];
            }
            else
            {
                x1 ^= a[i];
            }
        }
        cin >> q;
        while(q--)
        {
            ll ty;
            cin >> ty;
            if(ty == 1)
            {
                ll l, r;
                cin >> l >> r;
                x0 ^= (b[r] ^ b[l - 1]);
                x1 ^= (b[r] ^ b[l - 1]);
            }
            else
            {
                ll g;
                cin >> g;
                if(g == 0)
                {
                    cout << x0 << " ";
                }
                else
                {
                    cout << x1 << " ";
                }
            }
            
        }
        cout << endl;
    }
    return 0;
}

标签:ty,ll,cin,CF,1872,x0,x1,oplus
From: https://www.cnblogs.com/tongluosao/p/17687305.html

相关文章

  • CF 1872 D
    D.PlusMinusPermutation这道题要使\((p_{1\cdotx}+p_{2\cdotx}+\ldots+p_{\lfloor\frac{n}{x}\rfloor\cdotx})-(p_{1\cdoty}+p_{2\cdoty}+\ldots+p_{\lfloor\frac{n}{y}\rfloor\cdoty})\)最大,只需要让位置为\(x\)倍数的位置尽可能大,让位置为\(y......
  • CF 1872 C
    C.Non-coprimeSplit这道题可以先进行分类讨论。当\(r<=3\)时皆无解,先排除。当\(l≤x≤r\)中存在\(x\)为偶数时,就能直接找到答案\(a=b=x/2\)当\(l=r\)且\(l\)为奇数时,可以使用朴素求因数的方法判断是否存在\(j\)(\(2≤j≤\sqrt[2]{l}\))使\((a-j)\modj=0\),若存在,则找到答案\(......
  • 样本分析 99eddc2794077f97a5cfe3098f431c4cfc4fd6353957ee715b2eccbff066ce1d 由于.
     https://s.threatbook.com/report/file/99eddc2794077f97a5cfe3098f431c4cfc4fd6353957ee715b2eccbff066ce1d09:30:16:088, 99eddc2794077f97a5cfe3098f431c4cfc4fd6353957ee715b2eccbff066ce1d.exe, 1908:0, 1908, EXEC_create, C:\Users\bonelee\Desktop\99eddc2794077......
  • CF402D 题解
    2023-09-0418:42:46solution不难想到我们要先记录一下每一位的前缀\(\gcd\),我们发现我们选择一位的前缀\(\gcd\)除掉以后,前缀\(\gcd\)会变为\(1\)并且会导致这位之后的\(\gcd\)全部为\(1\)。所以每一位只能选择一次,并且我们从后往前扫肯定比从前往后扫要更优。我们......
  • CF1103C 题解
    2023-09-0514:52:07solution找路径很好找,我们随便跑个dfs树找个深度\(\ge\frac{n}{k}\)的路径输出即可。可是怎么找\(k\)个长度不是\(3\)的倍数的环呢?既然我们跑了dfs树,那么就没有横叉边,对于叶子节点非树边只有返祖边,然后一看这个很奇怪的条件——保证每个点度数大......
  • CF1851 部分题解
    2023-07-3019:35:02前言因为我实在是太菜了,没时间也不会做最后两题,所以这里只有前\(5\)道签到题的题解。之后我有时间看了后两题的题解再来更新吧~A先不用看那么多七七八八的,搞清楚下面几点即可:高度不能相同。高度差得被整除。高度差不能太大。好了,然后就可以\(AC\)......
  • CF232B Table
    2023-08-0716:29:49题意有一个\(n\timesm\)的矩阵,求使得每个\(n\timesn\)的矩阵中都有正好\(k\)个点的方案数,方案数对\(1e9+7\)取模。\(1\len\le100,n\lem\le10^{18},0\lek\len^2\)。思路通过观察样例并且自己手玩了一些数据后,我们发现,假设第\(i\)列放了\(k\)......
  • CF1833F Ira and Flamenco
    题目链接题解知识点:组合数学,枚举,双指针。注意到,长度为\(m\)且数字各不相同的子序列,那么最大值与最小值的差至少为\(m-1\)。因此,对于任意子序列,它是合法的,当且仅当,将其从小到大排序后是以\(1\)为等差的数列。因此,我们可以直接从原数组处理出所有不同数字的个数,并对数字从......
  • CF1829H Don't Blame Me
    比赛链接题解知识点:线性dp,位运算。考虑设\(f_{i,j}\)表示考虑了前\(i\)个数字,与和为\(j\)的方案数。转移方程显然。注意初值为\(f_{0,63}=1\)表示空集,此时注意\(k=6\)时要减去空集这一个方案。当然也可以选择不加入空集,但dp过程需要特别处理只选自己的方案。......
  • CF 842 vp记录
    A诈骗题,看起来有点高大上,其实只要将\(k\)减\(1\)即可。B此时序列中的递增子序列是不需要移动的,所以此时本题就满足一个贪心,设不在这个递增子序列中的数的个数是\(x\),则答案为\(\lfloor\frac{x}{k}\rfloor\)C这破比赛怎么这么喜欢排列。此时这个排列满足三个性质。每个......