Description

传送门

Solution

请围观lhx大佬的博客(大佬写的太好了我都没有写的动力了em)

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
int n,k;
int a[],b[];
ll sum[];
int L[],R[],t[];
ll dp[]; int tag[];
void downtag(int k)
{
tag[k<<]=tag[k<<|]=tag[k];
tag[k]=;
}
void modify(int k,int l,int r,int askx,int asky,int x)
{
if (askx>asky) return;
if (askx<=l&&r<=asky) {tag[k]=x;return;}
int mid=(l+r)/;
if (tag[k]) downtag(k);
if (askx<=mid) modify(k<<,l,mid,askx,asky,x);
if (mid<asky) modify(k<<|,mid+,r,askx,asky,x);
}
int query(int k,int l,int r,int x)
{
if (l==r) return tag[k];
int mid=(l+r)/;
if (tag[k]) downtag(k);
if (mid>=x) return query(k<<,l,mid,x);
else return query(k<<|,mid+,r,x);
}
int cnt;
ll solve(int x){
int re=query(,,cnt,x);
if (!re) return ;
return dp[re]+((long long)t[L[re]]-t[x]+k)%k;
}
int main()
{
scanf("%d%d",&n,&k);
for (int i=;i<=n;i++)
{
scanf("%d%d",&a[i],&b[i]);
sum[i]=a[i]+sum[i-];
if (b[i]!=) continue;
if (*a[i]>k) {puts("-1");return ;}
}
for (int i=;i<=n;i++)
{
if (b[i]==)
{
L[i]=(-*sum[i-]%k+k)%k;
R[i]=(-*sum[i]%k+k)%k;
}else L[i]=,R[i]=k-;
t[i*-]=L[i],t[i*]=R[i];
}
sort(t+,t+*n+);
cnt=unique(t+,t+*n+)-t-;
for (int i=n;i;i--)
{
L[i]=lower_bound(t+,t+cnt+,L[i])-t;
R[i]=lower_bound(t+,t+cnt+,R[i])-t;
dp[i]=solve(L[i]);
if (L[i]>R[i]) modify(,,cnt,R[i]+,L[i]-,i);
else modify(,,cnt,,L[i]-,i),modify(,,cnt,R[i]+,cnt,i);
}
ll ans=1e14;
for (int i=;i<=cnt;i++) ans=min(ans,solve(i));
printf("%lld",ans+*sum[n]);
}

[agc011F]Train Service Planning-[线段树优化dp+神秘思考题]的更多相关文章

  1. [AGC011F] Train Service Planning [线段树优化dp+思维]

    思路 模意义 这题真tm有意思 我上下楼梯了半天做出来的qwq 首先,考虑到每K分钟有一辆车,那么可以把所有的操作都放到模$K$意义下进行 这时,我们只需要考虑两边的两辆车就好了. 定义一些称呼: 上 ...

  2. [Agc011F] Train Service Planning

    [Agc011F] Train Service Planning 题目大意: 有n+1个车站,n条轨道,第i条轨道联通i-1和i车站,通过它要花a[i]时间,这条轨道有b[i]=1或2条车道,也就是说 ...

  3. Codeforces Round #426 (Div. 2) D 线段树优化dp

    D. The Bakery time limit per test 2.5 seconds memory limit per test 256 megabytes input standard inp ...

  4. BZOJ2090: [Poi2010]Monotonicity 2【线段树优化DP】

    BZOJ2090: [Poi2010]Monotonicity 2[线段树优化DP] Description 给出N个正整数a[1..N],再给出K个关系符号(>.<或=)s[1..k]. ...

  5. 【bzoj3939】[Usaco2015 Feb]Cow Hopscotch 动态开点线段树优化dp

    题目描述 Just like humans enjoy playing the game of Hopscotch, Farmer John's cows have invented a varian ...

  6. POJ 2376 Cleaning Shifts (线段树优化DP)

    题目大意:给你很多条线段,开头结尾是$[l,r]$,让你覆盖整个区间$[1,T]$,求最少的线段数 题目传送门 线段树优化$DP$裸题.. 先去掉所有能被其他线段包含的线段,这种线段一定不在最优解里 ...

  7. 洛谷$P2605\ [ZJOI2010]$基站选址 线段树优化$dp$

    正解:线段树优化$dp$ 解题报告: 传送门$QwQ$ 难受阿,,,本来想做考试题的,我还造了个精妙无比的题面,然后今天讲$dp$的时候被讲到了$kk$ 先考虑暴力$dp$?就设$f_{i,j}$表示 ...

  8. D - The Bakery CodeForces - 834D 线段树优化dp···

    D - The Bakery CodeForces - 834D 这个题目好难啊,我理解了好久,都没有怎么理解好, 这种线段树优化dp,感觉还是很难的. 直接说思路吧,说不清楚就看代码吧. 这个题目转 ...

  9. 4.11 省选模拟赛 序列 二分 线段树优化dp set优化dp 缩点

    容易想到二分. 看到第一个条件容易想到缩点. 第二个条件自然是分段 然后让总和最小 容易想到dp. 缩点为先:我是采用了取了一个前缀最小值数组 二分+并查集缩点 当然也是可以直接采用 其他的奇奇怪怪的 ...

随机推荐

  1. Python的优雅写法

    枚举 之前我们这样操作:           Python   1 2 3 4 i = 0 for item in iterable:     print i, item     i += 1 现在我 ...

  2. css属性之flex属性

    flex属性 规定了弹性元素如何伸长或缩短以适应flex容器中的可用空间.是一个简写属性,可以同时设置flex-grow, flex-shrink, flex-basis三个子属性. /* Basic ...

  3. 浏览器相关--H5本地存储

    因为项目需要,最近研究了一下HTML5本地存储相关的东西,在这简单的记录一下. 浏览器存储主要包括一下几个部分1. cookie2. localStorage3. sessionStorage4. i ...

  4. 关于日期的一些常用方法的封装——dates.js

    针对自己在日常用到的一些日期方法,整理成一个js日期插件,插件定义了一个dates全局对象,继承了Date函数,相当于在Date函数上做了一些扩展. 这个插件会不断更新,所有我之后用到的关于日期的自定 ...

  5. GPUImage源码解读之GLProgram

    简述 GLProgram是GPUImage中代表openGL ES 中的program,具有glprogram功能.其实是作者对OpenGL ES program的面向对象封装 初始化 - (id)i ...

  6. TopJUI Combobox 联动

    这里给联动进行一个简单定义:因Combobox选择或输入的值发生改变时对自身或者其它组件产生影响称为联动.(注:editable确定是否可以手动输入) 有两种实现方法: 一.自己写对应的onChang ...

  7. 点击label执行两次的bug

    首先我是这样的写的: <label> <input type="checkbox">点击 </label> 无论点击input还是文字,都会执行 ...

  8. restframework序列化使用方法

    serializers.Serializer class Userinfoserializers(serializers.Serializer): username = serializers.Cha ...

  9. PL/SQL 报错:动态执行表不可访问,本会话的自动统计被禁止。 在执行菜单里你可以禁止统计,或在v$session,v$sesstat 和vSstatname表里获得选择权限。

    现象: 第一次用PL/SQL Developer连接数据库,若用sys用户登录并操作则正常,若用普通用户比如haishu登录并创建一个表则报错“动态执行表不可访问,本会话的自动统计被禁止.在执行菜单里 ...

  10. MongoDB基础教程

    MongoDB 一.下载MongoDB数据库 1.进入MongoDB官网进行下载,网址:https://www.mongodb.com/. 2.下载完成后可进行安装,安装后,并有了MongoDB服务. ...