2025.2.15——1400

2025.2.15——1400


A 1400

B 1400

C 1400

------------------------------------------------

  • 思维+位运算+思维/数学


A

  1. 单独对一个数进行分析什么情况下会有贡献。
  2. 在前面且所有比其小的数,都必须是最小前缀。
  3. 两个树状数组记录小的个数和最小前缀的个数。遍历维护信息可以做到不使用树状数组(思维点)。

B

  1. 模拟发现可以获得所有区间异或和。但没有证明只能获得所有区间异或和。猜一发。
  2. 数组元素种类最多只有256个,同类相消,前缀异或和最多也只有256种。

C

  1. 分类讨论+思维

------------------------代码------------------------

A

#include <bits/stdc++.h>
#define int long long //
#define endl '\n'     // attention: interactive/debug
#define el cout << endl
using namespace std;
#define bug(BUG) cout << "bug:# " << (BUG) << endl
#define bug2(BUG1, BUG2) cout << "bug:# " << (BUG1) << " " << (BUG2) << endl
#define bug3(BUG1, BUG2, BUG3) cout << "bug:# " << (BUG1) << ' ' << (BUG2) << ' ' << (BUG3) << endl
#define bugv(VEC)               \
    {                           \
        for (auto Vec : VEC)    \
            cout << Vec << ' '; \
        el;                     \
    }

void _();
signed main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cout << fixed << setprecision(10);
    int T = 1;
    cin >> T;
    while (T--)
        _();
    return 0;
}

void _()
{
    int n;
    cin >> n;
    vector<int> a(n + 1);
    for (int i = 1; i <= n; i++)
        cin >> a[i];

    int res = 0;
    int lim = 1e12, mn = 1e12;
    for (int i = 1; i <= n; i++)
    {
        res += mn < a[i] && a[i] < lim; // 有选择 并且 在合法区间
        mn = min(mn, a[i]);
        if (mn - a[i])
            lim = min(lim, a[i]);
    }

    cout << res << '\n';
}
// // 树状数组  快速求前缀和
// // 维护差分数组(区间加)  位置(统计个数) ...
// struct Tree
// {
//     int n;
//     vector<int> tr;
//     Tree(int n1)
//     {
//         n = n1 + 2;
//         tr.assign(n + 2, 0);
//     }
//     void add(int x, int c) // 加点
//     {
//         for (int i = x; i <= n; i += i & -i)
//             tr[i] += c;
//     }
//     int ask(int x) // 前缀查询
//     {
//         int res = 0;
//         for (int i = x; i; i -= i & -i)
//             res += tr[i];
//         return res;
//     }
//     int ask(int l, int r) // 区间查询
//     {
//         if (l > r)
//             return 0ll;
//         return ask(r) - ask(l - 1);
//     }
// }; //    Tree tr(n);  tr.add(x,c)

// void _()
// {
//     int n;
//     cin >> n;
//     vector<int> a(n + 1);
//     for (int i = 1; i <= n; i++)
//         cin >> a[i];
//     Tree cnt(n), pre_cnt(n);

//     int pre_mn = 1e12;
//     int res = 0;
//     for (int i = 1; i <= n; i++)
//     {
//         if (cnt.ask(1, a[i]) && cnt.ask(1, a[i]) == pre_cnt.ask(1, a[i]))
//             res++;
//         pre_mn = min(pre_mn, a[i]);
//         cnt.add(a[i], 1);
//         if (pre_mn == a[i])
//             pre_cnt.add(a[i], 1);
//     }
//     cout << res << '\n';
// }

B

#include <bits/stdc++.h>
#define int long long
using namespace std;
#define bug(BUG) cout << "bug:# " << (BUG) << endl
#define bug2(BUG1, BUG2) cout << "bug:# " << (BUG1) << " " << (BUG2) << endl
#define bug3(BUG1, BUG2, BUG3) cout << "bug:# " << (BUG1) << ' ' << (BUG2) << ' ' << (BUG3) << endl
#define bugv(VEC)               \
    {                           \
        for (auto Vec : VEC)    \
            cout << Vec << ' '; \
        cout << '\n';           \
    }

void _();
signed main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cout << fixed << setprecision(10);
    int T = 1;
    cin >> T;
    while (T--)
        _();
    return 0;
}

void _()
{
    // srand(time(0));
    int n;
    cin >> n;
    vector<int> a(n + 1);
    for (int i = 1; i <= n; i++)
        // a[i] = rand() % 256;
        cin >> a[i];
    // bugv(a);
    set<int> s;
    s.insert(0);
    int pre = 0, res = 0;
    for (int i = 1; i <= n; i++)
    {
        pre ^= a[i];
        for (auto x : s)
        {
            res = max(res, pre ^ x);
        }
        s.insert(pre);
    }
    cout << res << '\n';
}

C

#include <bits/stdc++.h>
#define int long long
using namespace std;
#define bug(BUG) cout << "bug:# " << (BUG) << endl
#define bug2(BUG1, BUG2) cout << "bug:# " << (BUG1) << " " << (BUG2) << endl
#define bug3(BUG1, BUG2, BUG3) cout << "bug:# " << (BUG1) << ' ' << (BUG2) << ' ' << (BUG3) << endl
#define bugv(VEC)               \
    {                           \
        for (auto Vec : VEC)    \
            cout << Vec << ' '; \
        cout << '\n';           \
    }

void _();
signed main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cout << fixed << setprecision(10);
    int T = 1;
    cin >> T;
    while (T--)
        _();
    return 0;
}

void _()
{
    int mx = -20;
    int n;
    cin >> n;
    vector<int> a(n + 1);
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
        mx = max(mx, a[i]);
    }

    vector<pair<int, int>> res;
    auto add = [&](int i, int j)
    {
        a[i] += a[j];
        res.push_back({i, j});
    };

    if (mx < 1)
    {
        for (int i = n - 1; i; i--)
        {
            add(i, i + 1);
        }
    }
    else
    {
        int id = 1;
        for (int i = 1; i <= n; i++)
        {
            if (a[i] == mx)
            {
                id = i;
                break;
            }
        }
        int t = 10;
        while (t--)
        {
            add(id, id);
        }
        add(1, id);
        for (int i = 2; i <= n; i++)
        {
            add(i, i - 1);
            add(i, i - 1);
        }
    }
    // bool f = 1;
    // for (int i = 2; i <= n; i++)
    // {
    //     if (a[i] - a[i - 1] < 0)
    //     {
    //         f = 0;
    //     }
    // }
    // bug(f);
    cout << res.size() << '\n';
    for (auto [i, j] : res)
    {
        cout << i << ' ' << j << '\n';
    }
    // bug(20ll << 44);
    // bugv(a);
}

posted @   Jkke  阅读(1)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示