Tracking Segments(二分,区间前缀)

 Tracking Segments

You are given an array a consisting of n zeros. You are also given a set of m not necessarily different segments. Each segment is defined by two numbers li and ri ( 1lirin ) and represents a subarray ali,ali+1,,ari of the array a .

Let's call the segment li,ri beautiful if the number of ones on this segment is strictly greater than the number of zeros. For example, if a=[1,0,1,0,1] , then the segment [1,5] is beautiful (the number of ones is 3 , the number of zeros is 2 ), but the segment [3,4] is not is beautiful (the number of ones is 1 , the number of zeros is 1 ).

You also have q changes. For each change you are given the number 1xn , which means that you must assign an element ax the value 1 .

You have to find the first change after which at least one of m given segments becomes beautiful, or report that none of them is beautiful after processing all q changes.

## 输入格式

The first line contains a single integer t ( 1t104 ) — the number of test cases.

The first line of each test case contains two integers n and m ( 1mn105 ) — the size of the array a and the number of segments, respectively.

Then there are m lines consisting of two numbers li and ri ( 1lirin ) —the boundaries of the segments.

The next line contains an integer q ( 1qn ) — the number of changes.

The following q lines each contain a single integer x ( 1xn ) — the index of the array element that needs to be set to 1 . It is guaranteed that indexes in queries are distinct.

It is guaranteed that the sum of n for all test cases does not exceed 105 .

## 输出格式

For each test case, output one integer — the minimum change number after which at least one of the segments will be beautiful, or 1 if none of the segments will be beautiful.

## 样例 #1

### 样例输入 #1

```
6
5 5
1 2
4 5
1 5
1 3
2 4
5
5
3
1
2
4
4 2
1 1
4 4
2
2
3
5 2
1 5
1 5
4
2
1
3
4
5 2
1 5
1 3
5
4
1
2
3
5
5 5
1 5
1 5
1 5
1 5
1 4
3
1
4
3
3 2
2 2
1 3
3
2
3
1
```

### 样例输出 #1

```
3
-1
3
3
3
1
```

## 提示

In the first case, after first 2 changes we won't have any beautiful segments, but after the third one on a segment [1;5] there will be 3 ones and only 2 zeros, so the answer is 3.

In the second case, there won't be any beautiful segments.

复制代码
#include <bits/stdc++.h> #define int long long using namespace std; const int N=1e6+10,mod=1e9+7; int n,t,a[N],f[N],res,num,ans,m,ll[N],rr[N],q,s[N]; bool vis[N]; bool check(int u) { for(int i=1;i<=n;i++) s[i]=0,f[i]=0; for(int i=1;i<=u;i++) f[a[i]]=1; for(int i=1;i<=n;i++) s[i]=s[i-1]+f[i]; for(int i=1;i<=m;i++){ if((s[rr[i]]-s[ll[i]-1])*2>(rr[i]-ll[i])+1) return true; } return false; } signed main() { std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); cin>>t; while(t--){ cin>>n>>m; for(int i=1;i<=m;i++) cin>>ll[i]>>rr[i]; cin>>q; for(int i=1;i<=q;i++) cin>>a[i]; int l=1,r=q+1,flag=0; while(l<r){ int mid=l+r>>1; if(check(mid)) r=mid,flag=1; else l=mid+1; } if(!flag) cout<<-1<<endl; else cout<<r<<endl; } return 0; }
复制代码

 


__EOF__

本文作者Sakurajimamai
本文链接https://www.cnblogs.com/o-Sakurajimamai-o/p/17584482.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   o-Sakurajimamai-o  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
-- --
点击右上角即可分享
微信分享提示