首页 > 其他分享 >E. Tracking Segments

E. Tracking Segments

时间:2023-10-30 20:33:37浏览次数:36  
标签:Tracking int Segments mid cin 区间

E. Tracking Segments

题目大意:

给一个全为零的数组,m次询问区间,q次修改,定义一个区间中的1个数严格大于0个数为漂亮,问在第几次修改后出现了第一个完美区间。

思路:

对修改次数进行二分,利用前缀和判断区间中的1个数,时间复杂度为$mlog(q)$

code

int n, m;
int b[N];
vector<pii> a;
bool check(int op)
{
    int pre[n + 1] = {0}, res[n + 1] = {0};
    for (int i = 1; i <= op; ++i)
        res[b[i]] = 1;
    for (int i = 1; i <= n; ++i)
        pre[i] = pre[i - 1] + res[i];
    for (auto [l, r] : a)
        if (2 * (pre[r] - pre[l - 1]) > r - l + 1)
            return true;
    return false;
}
void solved()
{
    cin >> n >> m;
    a.resize(m);
    for (int i = 0; i < m; ++i)
    {
        int x, y;
        cin >> x >> y;
        a[i] = {x, y};
    }
    int q;
    cin >> q;
    for (int i = 1; i <= q; ++i)
    {
        int tot;
        cin >> tot;
        b[i] = tot;
    }
    int l = 0, r = q + 1;
    while (l + 1 < r)
    {
        int mid = (l + r) >> 1;
        if (check(mid))
            r = mid;
        else
            l = mid;
    }
    if (r != q + 1)
        cout << r << endl;
    else
        cout << -1 << endl;
}

标签:Tracking,int,Segments,mid,cin,区间
From: https://www.cnblogs.com/bhxyry/p/17798721.html

相关文章

  • PAT_A1104 Sum of Number Segments
    Givenasequenceofpositivenumbers,asegmentisdefinedtobeaconsecutivesubsequence.Forexample,giventhesequence{0.1,0.2,0.3,0.4},wehave10segments:(0.1)(0.1,0.2)(0.1,0.2,0.3)(0.1,0.2,0.3,0.4)(0.2)(0.2,0.3)(0.2,0.3,0.4)......
  • CF837G Functions On The Segments
    CF837GFunctionsOnTheSegmentsFunctionsOnTheSegments-洛谷|计算机科学教育新生态(luogu.com.cn)目录CF837GFunctionsOnTheSegments题目大意思路code题目大意你有\(n\)个函数,第\(i\)个函数\(f_i\)为:\[f_i(x)=\begin{cases}y_1,&x\lex_1\\ax+b,&x_1\le......
  • ABC159F Knapsack for All Segments
    原题翻译\(O(n^3)\)的朴素\(dp\)是simple的考虑定义一个子序列是”好的子序列”当且仅当\(a_l\)和\(a_r\)都在子序列中,容易发现他对答案的贡献是包含他的区间,即\(l\times(n-r+1)\)先说我自己的做法:设\(dp_{i,j}\)表示强制以\(i\)结尾,子序列和为\(j\)的......
  • CF997E Good Subsegments
    简要题意一个好区间是其中数在值域上连续的区间,给定\(n\)的排列,每次给定一个区间,问其中有多少好的子区间。数据范围:\(1\len\le120000\)。做法只有整体询问的版本是CupboardMonsters。值域上连续当且仅当区间最大值减最小值等于区间长度,考虑维护最大值减最小值减区间长度......
  • 回溯(backstracking)
    回溯(抽象成树型结构、一般无返回值backtracking)1.理论基础回溯和递归相辅相成一般递归函数下面的部分就是回溯的逻辑默认是纯暴力(后续可以剪枝)应用:组合【没有顺序】切割子集排列【有顺序】棋盘N皇后解数独回溯法都可以抽象为一个树型结构树的宽度:集合大......
  • CF1858D Trees and Segments
    一道考查预处理技巧的dp。观察式子\(a\timesL_0+L_1\),一个显然的想法是“定一求一”,即预处理求出对于每个\(L_1\)最大的\(L_0\),然后对于每个\(a\),枚举\(L_1\),统计最大的\(a\timesL_0+L_1\)。这样,我们将问题转化为了:已知\(L_1=len\),求出\(dp_{len}=L_{0max}\)。dp数......
  • D. Trees and Segments
    D.TreesandSegmentsTheteachersoftheSummerInformaticsSchooldecidedtoplant$n$treesinarow,anditwasdecidedtoplantonlyoaksandfirs.Todothis,theymadeaplan,whichcanberepresentedasabinarystring$s$oflength$n$.If$s_i=......
  • CF997E Good Subsegments
    简单题,不知道为啥和弱化版一个Difficulty。考虑弱化怎么做。区间\([l,r]\)中的数是连续的,当且仅当区间最大值\(\max\)减去区间最小值\(\min\)为\(r-l\),即\(\max-\min=r-l\)。考虑扫描线,固定右端点\(r\),统计每个左端点的贡献。由于\(S(l,r)=\text{max}-\text{min}+l......
  • 1843E - Tracking Segments
    Problem-E-Codeforces题意是现在有n个0,给你m段序列,然后给你q次操作,每次操作给一个x,把第x个0变成1,问你最少几次操作能出现一段序列里的1的数量大于0的数量,如果不存在,输出-1对于操作数是一个递增序列。如果第k次操作后正好可行,那么就不用管k+1及以后了。所以可以使用二分来解......
  • CF1843E Tracking Segments
    CF1843ETrackingSegmentsVP的时候本来摆烂了,结果快结束的时候想到了做法(没时间敲了qwq)。这里提供一种和已有题解不同的思路。我们发现,对于每个修改,我们可以将该点的值修改为这次修改的时间,未修改的点则赋为\(n+1\)。这样转化后,区间合法的条件就是区间内小于\(n+1\)的值至......