【CodeForces】【338E】Optimize!
线段树
先搞出来每个a[i]能连多少条边记为w[i]……如果对一组s[i],都满足w[i]-rank[i]>=0则这是一组合法方案,然后线段树维护w[i]-rank[i](第一个元素出去的时候后面所有的rank要-1,加入最后一个元素的时候后面的元素rank+1,建关于a[i]的权值线段树,记得离散化)
线段树维护的时候modify(区间修改)忘加push_down了……so sad
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std;
typedef long long LL;
inline int getint(){
int r=,v=; char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if(ch=='-')r=-;
for(; isdigit(ch);ch=getchar()) v=v*+ch-'';
return r*v;
}
const int N=,INF=~0u>>;
//#define debug
/********************template*******************/
struct node{
int size,min,add;
}t[N<<];
#define L (o<<1)
#define R (o<<1|1)
#define mid (l+r>>1)
int n,m,len,H,w[N],a[N],b[N],c[N];
void maintain(int o,int l,int r){
if (l==r) return;
t[o].size=t[L].size+t[R].size;
if (t[o].size) t[o].min=min(t[L].min,t[R].min);
else t[o].min=INF,t[o].add=;
}
int ql,qr;
void push_down(int o,int l,int r){
if (!t[o].add) return;
t[L].add+=t[o].add; t[R].add+=t[o].add;
t[L].min+=t[o].add; t[R].min+=t[o].add;t[o].add=;
}
void modify(int o,int l,int r,int num){
if (ql>qr) return;
if (ql<=l && qr>=r) t[o].add+=num,t[o].min+=num;
else{
push_down(o,l,r);
if (ql<=mid) modify(L,l,mid,num);
if (qr>mid ) modify(R,mid+,r,num);
maintain(o,l,r);
}
}
void update(int o,int l,int r,int pos,int rank){
if (l==r){
t[o].size^=;
t[o].min=t[o].size?w[pos]-rank-t[o].size:INF;
}else{
push_down(o,l,r);
if (a[pos]<=mid) update(L,l,mid,pos,rank);
if (a[pos]>mid) update(R,mid+,r,pos,rank+t[L].size);
maintain(o,l,r);
}
}
void out(int o,int l,int r){
printf("%d %d %d %d %d %d\n",
o,l,r,t[o].size,t[o].add,t[o].min);
if (l==r) return;
else {out(L,l,mid); out(R,mid+,r);}
}
inline bool cmp(int x,int y){return a[x]<a[y];}
int main(){
#ifndef ONLINE_JUDGE
freopen("CF338E.in","r",stdin);
freopen("CF338E.out","w",stdout);
#endif
n=getint(); len=getint(); H=getint();
F(i,,len) b[i]=getint();
sort(b+,b+len+);b[len+]=INF;
F(i,,n){
c[i]=i; a[i]=getint();
w[i]=len-(lower_bound(b+,b+len+,H-a[i])-b-);
}
sort(c+,c+n+,cmp);
F(i,,n) a[c[i]]=i;
F(i,,n*) t[i].min=INF;
F(i,,len){
ql=a[i]+; qr=n;
modify(,,n,-);
update(,,n,i,);
} #ifdef debug
F(i,,n) printf("%d %d\n",a[i],w[i]);
out(,,n);puts("");
#endif
int ans=t[].min>=;
F(i,len+,n){
ql=a[i-len]+; qr=n;
update(,,n,i-len,);
modify(,,n,); ql=a[i]+; qr=n;
update(,,n,i,);
modify(,,n,-);
if (t[].min>=) ans++;
#ifdef debug
printf("%d\n",i);
out(,,n);puts("");
#endif
}
printf("%d\n",ans);
return ;
}
【CodeForces】【338E】Optimize!的更多相关文章
- 【Codeforces #312 div2 A】Lala Land and Apple Trees
# [Codeforces #312 div2 A]Lala Land and Apple Trees 首先,此题的大意是在一条坐标轴上,有\(n\)个点,每个点的权值为\(a_{i}\),第一次从原 ...
- 【Codeforces Round #438 C】 Qualification Rounds
[链接]h在这里写链接 [题意] 给你n个问题,每个人都知道一些问题. 然后让你选择一些问题,使得每个人知道的问题的数量,不超过这些问题的数量的一半. [题解] 想法题. 只要有两个问题. 这两个问题 ...
- 【Codeforces Round #438 B】Race Against Time
[链接]h在这里写链接 [题意] 时针.分钟.秒针走不过去. 问你从t1时刻能不能走到t2时刻 [题解] 看看时针.分钟.秒针的影响就好. 看看是不是在整时的位置就好. 然后看看影响到x不能到y; 然 ...
- 【Codeforces Round #438 A】Bark to Unlock
[链接]h在这里写链接 [题意] 在这里写题意 [题解] 枚举它是在连接处,还是就是整个字符串就好. [错的次数] 0 [反思] 在这了写反思 [代码] #include <bits/stdc+ ...
- 【codeforces 718 C&D】C. Sasha and Array&D. Andrew and Chemistry
C. Sasha and Array 题目大意&题目链接: http://codeforces.com/problemset/problem/718/C 长度为n的正整数数列,有m次操作,$o ...
- 【Codeforces 321E / BZOJ 5311】【DP凸优化】【单调队列】贞鱼
目录 题意: 输入格式 输出格式 思路: DP凸优化的部分 单调队列转移的部分 坑点 代码 题意: 有n条超级大佬贞鱼站成一行,现在你需要使用恰好k辆车把它们全都运走.要求每辆车上的贞鱼在序列中都是连 ...
- 【codeforces contest 1119 F】Niyaz and Small Degrees
题目 描述 \(n\) 个点的树,每条边有一个边权: 对于一个 \(X\) ,求删去一些边后使得每个点的度数 \(d_i\) 均不超过 \(X\) 的最小代价: 你需要依次输出 \(X=0 \to n ...
- 【codeforces #282(div 1)】AB题解
A. Treasure time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...
- 【codeforces 415D】Mashmokh and ACM(普通dp)
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
- 【搜索】【并查集】Codeforces 691D Swaps in Permutation
题目链接: http://codeforces.com/problemset/problem/691/D 题目大意: 给一个1到N的排列,M个操作(1<=N,M<=106),每个操作可以交 ...
随机推荐
- ListView与.FindControl()方法的简单练习 #2 -- ItemUpdting事件中抓取「修改后」的值
原文出處 http://www.dotblogs.com.tw/mis2000lab/archive/2013/06/24/listview_itemupdating_findcontrol_201 ...
- Java 为什么使用抽象类和接口
Java接口和Java抽象类代表的就是抽象类型,就是我们需要提出的抽象层的具体表现.OOP面向对象的编程,如果要提高程序的复用率,增加程序的可维护性,可扩展性,就必须是面向接口的编程,面向抽象的编程, ...
- C#条件编译,发布多平台和多种选择性的项目
http://www.cnblogs.com/chengulv/p/4579528.html 界面操作参考 这样正对不同环境就可以编译出不同的exe或者dll,做到一个项目的灵活多变.条件编译还可以满 ...
- 实战Django:官方实例Part6
我们终于迎来了官方实例的最后一个Part.在这一节中,舍得要向大家介绍Django的静态文件管理. 现在,我们要往这个投票应用里面添加一个CSS样式表和一张图片. 一个完整的网页文件,除了html文档 ...
- WPF实现渐变淡入淡出的动画效果
1.实现原理 1.1 利用UIElement.OpacityMask属性,用于改变对象区域的不透明度的画笔.可以使元素的特定区域透明或部分透明,从而实现比较新颖的效果. 1.2 OpacityMask ...
- 多点触摸画板(MultiTouchCanvas)
这是个简单的支持多点触摸的画板控件, 绘制功能基于WPF InkCanvas,也是我drawTool系列文章的开篇. 阅读该文章后可能产生一些问题: 1. 如果对生成的笔迹对象进行控制 如果要对生成的 ...
- 菜鸟学习Spring——60s让你学会动态代理原理
一.为什么要使用动态代理 当一个对象或多个对象实现了N中方法的时候,由于业务需求需要把这个对象和多个对象的N个方法加入一个共同的方法,比如把所有对象的所有方法加入事务这个时候有三种方法 ...
- android开发系列之回调函数
想必对于回调函数大家肯定不陌生,因为这是我们开发里面常用的代码技巧.我也就不废话了,让我们直接来看代码吧! public class TestCallback { public interface I ...
- 用Java实现3DES
3DES,即三重DES,是DES的加强版,也是DES的一个更安全的变形.它使用3个56位(共168位)的密钥对数据进行三次加密,和DES相比,安全性得到了较大的提高. 实际上,3DES是一个过渡的加密 ...
- jquery一个控件绑定多个事件
jQuery("#id").bind("click mouseover",function(){}) // 两个事件中间有空格 $("p" ...