提出 #60069291


ソースコード 拡げる

#include <bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/hash_policy.hpp>
// #include <ext/pb_ds/tree_policy.hpp>
#define ps putchar(' ')
#define pe putchar('\n')
#define int long long
#define eb emplace_back
#define pi pair<int, int>
#define mk make_pair
#define fi first
#define se second
#define Ad tr[p].ad
// #define Ad t[p].ad
#define ls p << 1
#define rs p << 1 | 1
// #define ls tr[p].son[0]
// #define rs tr[p].son[1]
// #define ls t[p].son[0]
// #define rs t[p].son[1]
#define len (r - l + 1)
#define mid ((l + r) >> 1)
using namespace std;
// using namespace __gnu_pbds
inline int read()
{
    int f = 0, ans = 0;
    char c = getchar();
    while (!isdigit(c))
        f |= c == '-', c = getchar();
    while (isdigit(c))
        ans = (ans << 3) + (ans << 1) + c - 48, c = getchar();
    return f ? -ans : ans;
}
void write(int x)
{
    if (x < 0)
        putchar('-'), x = -x;
    if (x > 9)
        write(x / 10);
    putchar(x % 10 + '0');
}
const int N = 2e5 + 5, M = N << 2, inf = 1e18, mod = 998244353;
int n, m, cnt, id[N];
int s1[N], s2[N];
string s;
signed main()
{
    // freopen(".in", "r", stdin);
    // freopen(".out", "w", stdout);
    n = read(), m = read();
    cin >> s, s = ' ' + s;
    for (int i = 1; i <= n; ++i)
        if (s[i] == '/')
            id[++cnt] = i;
    for (int i = 1; i <= n; ++i)
        s1[i] = s1[i - 1] + (s[i] == '1');
    for (int i = n; i; --i)
        s2[i] = s2[i + 1] + (s[i] == '2');
    while (m--)
    {
        int s = read(), t = read();
        auto get = [&](int i)
        { return min(s1[i] - s1[s - 1], s2[i] - s2[t + 1]); };
        int l = lower_bound(id + 1, id + cnt + 1, s) - id, r = upper_bound(id + 1, id + cnt + 1, t) - id - 1;
        if (l > r)
        {
            puts("0");
            continue;
        }
        while (len > 10)
        {
            int Mid = l + r >> 1;
            int MMid = Mid + r >> 1;
            get(id[Mid]) < get(id[MMid])
                ? (l = mid)
                : (r = mid);
            // get(id[mid]) <= get(id[mid + 1])
            //     ? (l = mid)
            //     : (r = mid);
            // get(id[mid]) <= get(id[mid + 1])
            //     ? (l = mid)
            //     : (r = mid);
            // get(id[mid]) <= get(id[mid + 1])
            //     ? (l = mid)
            //     : (r = mid);
            // get(id[mid]) <= get(id[mid + 1])
            //     ? (l = mid)
            //     : (r = mid);
            // get(id[mid]) <= get(id[mid + 1])
            //     ? (l = mid)
            //     : (r = mid);
            // get(id[mid]) <= get(id[mid + 1])
            //     ? (l = mid)
            //     : (r = mid);
            // get(id[mid]) <= get(id[mid + 1])
            //     ? (l = mid)
            //     : (r = mid);
            // get(id[mid]) <= get(id[mid + 1])
            //     ? (l = mid)
            //     : (r = mid);
        }
        int ans = 0;
        for (int i = max(l - 8000, 1ll); i <= min(r + 8000, cnt); ++i)
            ans = max(ans, get(id[i]));
        write(ans * 2 + 1), pe;
    }
    return 0;
}

提出情報

提出日時
問題 E - 11/22 Subsequence
ユーザ zhangjitlng
言語 C++ 20 (gcc 12.2)
得点 500
コード長 3222 Byte
結果 AC
実行時間 1840 ms
メモリ 5660 KiB

コンパイルエラー

Main.cpp: In function ‘int main()’:
Main.cpp:73:25: warning: suggest parentheses around ‘+’ inside ‘>>’ [-Wparentheses]
   73 |             int Mid = l + r >> 1;
      |                       ~~^~~
Main.cpp:74:28: warning: suggest parentheses around ‘+’ inside ‘>>’ [-Wparentheses]
   74 |             int MMid = Mid + r >> 1;
      |                        ~~~~^~~

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 500 / 500
結果
AC × 1
AC × 25
セット名 テストケース
Sample 00_sample_00.txt
All 00_sample_00.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt, 02_corner_00.txt, 02_corner_01.txt, 02_corner_02.txt, 02_corner_03.txt
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 1 ms 3484 KiB
01_random_00.txt AC 1671 ms 5496 KiB
01_random_01.txt AC 1245 ms 4508 KiB
01_random_02.txt AC 1522 ms 5504 KiB
01_random_03.txt AC 1384 ms 5304 KiB
01_random_04.txt AC 1673 ms 5620 KiB
01_random_05.txt AC 1417 ms 4924 KiB
01_random_06.txt AC 1755 ms 5388 KiB
01_random_07.txt AC 808 ms 4744 KiB
01_random_08.txt AC 1840 ms 5328 KiB
01_random_09.txt AC 1387 ms 4920 KiB
01_random_10.txt AC 923 ms 5660 KiB
01_random_11.txt AC 1110 ms 5312 KiB
01_random_12.txt AC 392 ms 5480 KiB
01_random_13.txt AC 651 ms 4948 KiB
01_random_14.txt AC 1336 ms 5616 KiB
01_random_15.txt AC 1073 ms 4832 KiB
01_random_16.txt AC 1453 ms 5660 KiB
01_random_17.txt AC 1175 ms 4740 KiB
01_random_18.txt AC 1471 ms 5408 KiB
01_random_19.txt AC 11 ms 5020 KiB
02_corner_00.txt AC 9 ms 5160 KiB
02_corner_01.txt AC 3 ms 3372 KiB
02_corner_02.txt AC 4 ms 3496 KiB
02_corner_03.txt AC 4 ms 3508 KiB