CodeForces #Pi D.One-Dimensional Battle Ships

来源:互联网 发布:淘宝店铺出售法律风险 编辑:程序博客网 时间:2024/05/22 14:14

题目大意:

给定一个区间,每次除去一个点,要求在剩下的空白里能放下k个长为a的区间。


解题思路:

直接用set保存当前分割的区间就可以了。总复杂度为n * logn


#include <cstring>#include <cstdio>#include <cmath>#include <queue>#include <map>#include <set>#define LL long long#define MAX 2147483647using namespace std;set <int> s;int n,k,a,m,b;int max(int x,int y){if (x>y) return x;else return y;}int min(int x,int y){if (x<y) return x;else return y;}int main(){scanf("%d%d%d",&n,&k,&a);scanf("%d",&m);s.clear();int sum=(n+1)/(a+1);s.insert(0); s.insert(n+1);int ans=-1;bool flag=0;for (int i=1;i<=m;i++){        scanf("%d",&b);set<int>::iterator it=s.upper_bound(b);int y=*it;int x=*(--it);sum-=(y-x)/(a+1)-(y-b)/(a+1)-(b-x)/(a+1);if (sum<k && !flag) ans=i, flag=1;s.insert(b);}printf("%d",ans);return 0;}


0 0
原创粉丝点击