https://www.luogu.org/problem/P3071

AC代码:

https://www.luogu.org/blog/user33426/solution-p3071

莫名其妙RE:

#include<cstdio>
#include<iostream> using namespace std;
#define MAX 500005
#define lson o<<1
#define rson o<<1|1 int n,m,ans,cnt;
int addv[MAX];
struct node{
int lm, rm, xm;
//从左到右的最大空位置的数
//从右到左的
//整个的
}tr[MAX<<2]; inline int max(int x,int y) {
return x>y?x:y;
} void push_up(int o, int l, int r) {
tr[o].xm = max(max(tr[lson].xm , tr[rson].xm ), tr[lson].rm + tr[rson].lm );
int mid = (l+r)>>1;
if(tr[lson].xm == mid-l+1) tr[o].lm = tr[lson].xm + tr[rson].lm ;
else tr[o].lm = tr[lson].lm ;
if(tr[rson].xm == r-mid) tr[o].rm = tr[rson].xm + tr[lson].rm ;
else tr[o].rm = tr[rson].rm ;
}
void build(int o, int l, int r) {
if(l == r) {
tr[o].lm = tr[o].rm = tr[o].xm = 1;
return ;
}
int mid = (l+r)>>1;
build(lson, l, mid);
build(rson, mid+1, r);
push_up(o, l, r);
} void pushtag(int o) {
tr[o].lm = tr[o].rm = tr[o].xm = 0;
addv[o] = 1;
}
void push_down(int o, int l, int r) {
if(addv[o] == 0) return ;
int mid = (l+r)>>1;
tr[lson].lm = tr[lson].rm = tr[lson].xm = addv[o]>0 ? 0 : (mid-l+1); //-1为离开
tr[rson].lm = tr[rson].rm = tr[rson].xm = addv[o]>0 ? 0 : (r-mid); //1为坐下
addv[lson] = addv[rson] = addv[o];
addv[o] = 0;
return ;
} void insert(int o, int l, int r, int a, int op) {//op=1表示前a个改为1,即前a个坐下, op=2表示后a个改为1
// printf("%d %d %d %d %d", o, l, r, a, op);
// printf("\n");
if(a == 0) return ;
if(r-l+1 == a) {pushtag(o); return ;}
int mid = (l+r)>>1;
push_down(o, l, r);
if(op == 1) {
if(tr[lson].xm >= a) insert(lson, l, mid, a, 1);
else if(tr[lson].rm + tr[rson].lm >= a) {
insert(rson, mid+1, r, a-tr[lson].rm , 1); //这个顺序太莫名其妙了....
insert(lson, l, mid+1, tr[lson].rm , 2);//因为是从前往后,所以lson肯定是坐下tr[lson].r个
}
else insert(rson, mid+1, r, a, 1);//
} else {
if(tr[rson].xm >= a) insert(rson, mid+1, r, a, 2);
else if(tr[lson].rm + tr[rson].lm >= a){
insert(lson, l, mid, a-tr[rson].lm , 2);
insert(rson, mid+1, r, tr[rson].lm , 1);
}
else insert(lson, l, mid, a, 2);
}
push_up(o, l, r);
} void del(int o, int l, int r, int ql, int qr) {
if(qr<l||r<ql) return;
if(ql <= l && r <= qr) {
tr[o].lm = tr[o].rm = tr[o].xm = (r-l+1);
addv[o] = -1;
return ;
}
int mid = (l+r)>>1;
push_down(o, l, r);
del(lson, l, mid, ql, qr);
del(rson, mid+1, r, ql, qr);
push_up(o,l,r);
} int main() {
scanf("%d%d",&n,&m);
build(1, 1, n);
// int tmp;
// scanf("%d",&tmp);
// printf("o : %d, %d", tmp, tr[tmp].lm);
char cmd;
while(m--) {
cin>>cmd;
if(cmd == 'A') {
int a;
scanf("%d",&a);
if(tr[1].xm < a) ans++;
else insert(1, 1, n, a, 1);
} else {
int x, y;
scanf("%d%d",&x, &y);
del(1, 1, n, x, y);
}
}
printf("%d",ans);
}

luoguP3071 [USACO13JAN]座位Seating的更多相关文章

  1. 洛谷 P3071 [USACO13JAN]座位Seating(线段树)

    P3071 [USACO13JAN]座位Seating 题目链接 思路: 一开始把题给读错了浪费了好多时间呜呜呜. 因为第二个撤离操作是区间修改,所以我们可以想到用线段树来做.对于第一个操作,我们只需 ...

  2. 洛谷 P3071 [USACO13JAN]座位Seating-线段树区间合并(判断找,只需要最大前缀和最大后缀)+分治+贪心

    P3071 [USACO13JAN]座位Seating 题目描述 To earn some extra money, the cows have opened a restaurant in thei ...

  3. [USACO13JAN] Seating

    https://www.luogu.org/problem/show?pid=3071 题目描述 To earn some extra money, the cows have opened a re ...

  4. 【vijos】1286 座位安排(状压dp)

    https://vijos.org/p/1286 这题好神不会捉... 首先我们知道所有情况有C(n*m, k)种,这个好搞.但是两两不相邻这个有点难搞.. 原来是状压dp..sigh. 设状态f[i ...

  5. Educational Codeforces Round 11B. Seating On Bus 模拟

    地址:http://codeforces.com/contest/660/problem/B 题目: B. Seating On Bus time limit per test 1 second me ...

  6. CSU 1997: Seating Arrangement【构造】

    1997: Seating Arrangement Description Mr. Teacher老师班上一共有n个同学,编号为1到n. 在上课的时候Mr. Teacher要求同学们从左至右按1, 2 ...

  7. Seating Arrangement

    1997: Seating Arrangement Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 543     Solved:  ...

  8. 团体程序设计天梯赛-练习集L2-010. 排座位

    L2-010. 排座位 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位. ...

  9. Co-prime Array&&Seating On Bus(两道水题)

     Co-prime Array Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Su ...

随机推荐

  1. Django_xadmin_TypeError: Related Field got invalid lookup: icontains

    问题: 当我在给某一张表加上外键搜索的时候,会出现 TypeError: Related Field got invalid lookup: icontains 问题原因: a 表关联 b表,也就是说 ...

  2. django models 数据库操作

    django models 数据库操作 创建模型 实例代码如下 from django.db import models class School(models.Model): pass class ...

  3. Octave中的矩阵操作

    >> a=[1 2;3 4;5 6];>> b=ones(2,3)b = 1 1 1 1 1 1 >> a*b 矩阵的乘法ans = 3 3 3 7 7 7 11 ...

  4. WPF 精修篇 窗体唯一(Single) 显示在最前

    原文:WPF 精修篇 窗体唯一(Single) 显示在最前 只运行一个窗体 并在一次点击时 显示到最前 发现用 SetForegroundWindow 并不是稳定的有效 最后使用 SetWindowP ...

  5. <Matrix> 311 378

    311. Sparse Matrix Multiplication 稀疏矩阵的计算.稀疏矩阵的特点是有大量的0,如果采用暴力算法则比然会有很多无意义的计算. C[ i ][ j ] += A[ i ] ...

  6. Java并发编程:Java中的锁和线程同步机制

    锁的基础知识 锁的类型 锁从宏观上分类,只分为两种:悲观锁与乐观锁. 乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新 ...

  7. 1+x 证书 Web 前端开发中级理论考试(试卷 6 )

    1+x 证书 Web 前端开发中级理论考试(试卷 6 ) 官方QQ群 1+x 证书 web 前端开发初级对应课程分析 http://blog.zh66.club/index.php/archives/ ...

  8. 使用php开发,基于swoole扩展开发的工具 swoole-crontab 作业/任务调度

    Swoole-Crontab(基于Swoole扩展) 1.概述 基于swoole的定时器程序,支持秒级处理. 异步多进程处理. 完全兼容crontab语法,且支持秒的配置,可使用数组规定好精确操作时间 ...

  9. PHP 源码学习 | 变量类型数据结构

    前段时间因为项目需要,研究了一下在 Windows 系统下进行 PHP 扩展的开发,对于 PHP 扩展的开发并不是一件容易的事情(话又说回来了,会者不难,难者不会,关键是自己不会).我当时的需求,主要 ...

  10. vue动画实现方式

    vue动画实现方式 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset=&q ...