[luogu P2205] [USACO13JAN]画栅栏Painting the Fence

题目描述

Farmer John has devised a brilliant method to paint the long fence next to his barn (think of the fence as a one-dimensional number line). He simply attaches a paint brush to his favorite cow Bessie, and then retires to drink a cold glass of water as Bessie walks back and forth across the fence, applying paint to any segment of the fence that she walks past.

Bessie starts at position 0 on the fence and follows a sequence of N moves (1 <= N <= 100,000). Example moves might be "10 L", meaning Bessie moves 10 units to the left, or "15 R", meaning Bessie moves 15 units to the right. Given a list of all of Bessie's moves, FJ would like to know what area of the fence gets painted with at least K coats of paint. Bessie will move at most 1,000,000,000 units away from the origin during her walk.

Farmer John 想出了一个给牛棚旁的长围墙涂色的好方法。(为了简单起见,我们把围墙看做一维的数轴,每一个单位长度代表一块栅栏)他只是简单的把刷子蘸满颜料,系在他最喜欢的奶牛Bessie上,然后让Bessie来回地经过围墙,自己则在一旁喝一杯冰镇的凉水。(……-_-|||) Bessie 经过的所有围墙都会被涂上一层颜料。Bessie从围墙上的位置0出发,并将会进行N次移动(1 <= N <= 100,000)。比如说,“10 L”的意思就是Bessie向左移动了10个单位。再比如说“15 R”的意思就是Bessie向右移动了15个单位。给出一系列Bessie移动的清单。FJ 想知道有多少块栅栏涂上了至少K层涂料。注意:Bessie最多会移动到离原点1,000,000,000单位远的地方。

输入输出格式

输入格式:

  • 第1行: 两个整数: N K

  • 第2...N+1 行: 每一行都描述了Bessie的一次移动。 (比如说 “15 L")

输出格式:

  • 一个整数:被至少涂上K层涂料的栅栏数

(注意:输出的最后一定要输出换行符!否则会WA)

输入输出样例

输入样例#1: 复制

6 2
2 R
6 L
1 R
8 L
1 R
2 R 
输出样例#1: 复制

6

说明

PS1:来源:usaco jan silver P01 想看原题的请戳http://www.usaco.org/index.php?page=viewproblem2&cpid=226)

PS2:测试数据也可以在在http://www.usaco.org/index.php?page=jan13problems上下载,还可以看到题解(不过是英文的:-D)

PS3:如果有翻译的问题或题目的不理解,可以在问答后面留言的说。

这道题很早就写过,当时用离散+差分就水过去了。

今天心血来潮写了一颗链表指针版的线段树。。

这真是个好东西。。

还有usaco竟然可以载数据,很妙啊。。

哦还有就是,今天终于会用unique,lower_bound和upper_bound了。

code:

 %:pragma GCC optimize()
 #include<bits/stdc++.h>
 using namespace std;
 ;
 int n,k,las,cnt,ans,b[N]; char ch;
 struct line {int x,y;}a[N];
 class node {
     private:
         int v,t; node *l,*r;
     public:
         #define m ((l)+(r)>>1)
         node() {l=r=,v=t=;}
         inline void pushup(node* cu) {
             cu->v=;
             ) cu->v+=cu->l->v;
             ) cu->v+=cu->r->v;
         }
         inline void pushdown(node *cu) {
             ) cu->l->t+=cu->t,cu->l->v+=cu->t;
             ) cu->r->t+=cu->t,cu->r->v+=cu->t;
             cu->t=;
         }
         inline void setup(node* &cu,int l,int r) {
             cu=new node;
             ==r) {cu->v=cu->t=; return;}
             setup(cu->l,l,m),setup(cu->r,m,r);
             pushup(cu);
         }
         inline void update(node* &cu,int l,int r,int aiml,int aimr) {
             if (l>=aiml&&r<=aimr) {cu->v++,cu->t++; return;}
             pushdown(cu);
             if (aimr<=m) update(cu->l,l,m,aiml,aimr); else
             if (aiml>=m) update(cu->r,m,r,aiml,aimr);
             else update(cu->l,l,m,aiml,aimr),update(cu->r,m,r,aiml,aimr);
             pushup(cu);
         }
         inline int answer(node* &cu,int l,int r,int x) {
             ==r) return cu->v;
             pushdown(cu);
             return x<m?answer(cu->l,l,m,x):answer(cu->r,m,r,x);
         }
 }t,*root;
 inline int read() {
     ,f=; ch=getchar();
     :,ch=getchar();
     +ch-',ch=getchar();
     return x*f;
 }
 int main() {
     n=read(),k=read(),ans=las=,b[]=;
     ,x; i<=n; i++) {
         x=read();
         while (ch!='L'&&ch!='R') ch=getchar();
         if (ch=='L') a[i].x=las-x,a[i].y=las,b[i]=las-x,las=a[i].x;
         else a[i].x=las,a[i].y=las+x,b[i]=las+x,las=a[i].y;
     }
     sort(b,b++n);
     cnt=unique(b,b++n)-b;
     root=,t.setup(root,,cnt);
     ,l,r; i<=n; i++) {
         l=a[i].x,r=a[i].y;
         l=lower_bound(b,b+cnt,l)-b,l++;
         r=lower_bound(b,b+cnt,r)-b,r++;
         t.update(root,,cnt,l,r);
     }
     ,s; i<cnt; i++)
         s=t.answer(root,,cnt,i),ans+=(b[i]-b[i-])*(s>=k);
     cout<<ans<<endl;
     ;
 }

[luogu P2205] [USACO13JAN]画栅栏Painting the Fence的更多相关文章

  1. 洛谷——P2205 [USACO13JAN]画栅栏Painting the Fence

    题目描述 Farmer John has devised a brilliant method to paint the long fence next to his barn (think of t ...

  2. 洛谷 P2205 [USACO13JAN]画栅栏Painting the Fence

    传送门 题目大意: 开始站在原点,给出一系列操作 x L/R,表示向左或向右走几步. 最多会移动到离原点1,000,000,000单位远的地方. n次操作,n<=100000 问走过k次的地方有 ...

  3. 洛谷 画栅栏Painting the Fence 解题报告

    P2205 画栅栏Painting the Fence 题目描述 \(Farmer\) \(John\) 想出了一个给牛棚旁的长围墙涂色的好方法.(为了简单起见,我们把围墙看做一维的数轴,每一个单位长 ...

  4. 洛谷 P2205 [USACO13JAN]画栅栏

    这题其实没什么,但用到的算法都十分有用.做一个不恰当的比喻,这是一只必须用牛刀杀的鸡,但因为我这个蒟蒻杀不死牛,所以只能找只鸡来练练手. 题目描述 Farmer John 想出了一个给牛棚旁的长围墙涂 ...

  5. 洛谷 P3079 [USACO13MAR]农场的画Farm Painting

    P3079 [USACO13MAR]农场的画Farm Painting 题目描述 After several harsh winters, Farmer John has decided it is ...

  6. Painting The Fence(贪心+优先队列)

    Painting The Fence(贪心+优先队列) 题目大意:给 m 种数字,一共 n 个,从前往后填,相同的数字最多 k 个在一起,输出构造方案,没有则输出"-1". 解题思 ...

  7. [Swift]LeetCode587. 安装栅栏 | Erect the Fence

    There are some trees, where each tree is represented by (x,y) coordinate in a two-dimensional garden ...

  8. 【luogu P2731 骑马修栅栏】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2731 这个题是欧拉回路的模板题,那么在这里给出一个hierholzer的做法. 对于求欧拉回路的问题,有Fl ...

  9. USACO 2013 January Silver Painting the Fence /// oj23695

    题目大意: 输入n,k :n次操作 找到覆盖次数在k及以上的段的总长 一开始位置在0 左右活动范围为1-1000000000 接下来n行描述每次操作的步数和方向 Sample Input 6 22 R ...

随机推荐

  1. GreenDao开源ORM框架浅析

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u011133213/article/details/37738943 Android程序开发中,避免 ...

  2. linux----------linux下配置内网ip

    1./etc/sysconfig/network-scripts/ifcfg-eth1   创建这个文件里面的内容如下 TYPE="Ethernet" BOOTPROTO=&quo ...

  3. Software Testing 2 —— Fault、error and failure小练习

    Questions: Below are two faulty programs. Each includes a test case that results in failure. Answer ...

  4. centos7.5 修改网卡名称

    1.修改网卡配置文件中名称信息 vim /etc/sysconfig/network-scripts/ifcfg-ens33 将其中的名称为ens33的改为eth0 ,并将uuid删除以便后面克隆 2 ...

  5. oracle导出导入指定表

    从源数据库导出: exp user1/pwd@server1/orcl file=c:\temp\exp.dmp tables=(table1, table2) 导入到目标数据库: imp user2 ...

  6. npm 传入参数

    你可以运行类似npm start 8080的代码,并且不需要去修改script.js或者配置文件: 例如,在你的"scripts"JSON值,包括-- "start&qu ...

  7. SQL小结1

    #数据表的查询框架: select [all | distinct] select_list from tb_name [where 查询条件] [group by <group_by_expr ...

  8. 【题解】Luogu P5071 [Ynoi2015]此时此刻的光辉

    众所周知lxl是个毒瘤,Ynoi道道都是神仙题,题面好评 原题传送门 一看这题没有修改操作就知道这是莫队题(我也只会莫队) 我博客里对莫队的简单介绍 一个数N可以分解成\(p_1^{c_1}p_2^{ ...

  9. 【Alpha】Scrum Meeting 6

    目录 前言 任务分配 燃尽图 会议照片 签入记录 困难 前言 第6次会议在4月10日22:00由PM在一公寓三楼召开. 交流确认了任务进度,对下一阶段任务进行分配.时长15min. 任务分配 姓名 当 ...

  10. 剑指offer(38)二叉树的深度

    题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 题目分析 树的深度=左子树的深度和右子树深度中最大者+1 代码 fu ...