Permutacja
题意:
要求动态求问是否有一个 1~n 的排列,使得满足 $p_i \leq a_i$,给定 $a_i$ 初始值,接下来 m次单个位置修改,每次求问是否可以构造出来。
解法:
构造一序列使得 $cnt_i$ 表示 $a$ 序列当前 i 的个数,记 $suffix(i)$ 为此序列的后缀和。
那么可以构造出序列 <-> $ 0 \leq suffix(i) - (n-i+1)$,建权值线段树维护 $suffix(i) - (n-i+1)$ 即可。
- #include <bits/stdc++.h>
- #define l(x) ch[x][0]
- #define r(x) ch[x][1]
- #define LL long long
- const int N = ;
- using namespace std;
- int totn,n,a[N];
- int ch[N<<][];
- LL minv[N<<],addv[N<<];
- void update(int x)
- {
- minv[x] = min(minv[l(x)], minv[r(x)]);
- }
- void push(int x)
- {
- if(addv[x]==) return;
- addv[l(x)] += addv[x], minv[l(x)] += addv[x];
- addv[r(x)] += addv[x], minv[r(x)] += addv[x];
- addv[x] = ;
- }
- int build(int l,int r)
- {
- int x = ++totn;
- addv[x] = ;
- if(l==r)
- {
- l(x) = r(x) = ;
- minv[x] = -l;
- return x;
- }
- int mid = (l+r)>>;
- l(x) = build(l,mid);
- r(x) = build(mid+,r);
- update(x);
- return x;
- }
- void add(int x,int l,int r,int ql,int qr,LL qv)
- {
- push(x);
- if(ql<=l && r<=qr)
- {
- addv[x] = qv;
- minv[x] += qv;
- return ;
- }
- int mid = (l+r)>>;
- if(ql<=mid) add(l(x),l,mid,ql,qr,qv);
- if(mid<qr) add(r(x),mid+,r,ql,qr,qv);
- update(x);
- }
- int main()
- {
- scanf("%d",&n);
- for(int i=;i<=n;i++)
- {
- scanf("%d",&a[i]);
- a[i] = n-a[i]+;
- }
- build(,n);
- for(int i=;i<=n;i++) add(,,n,a[i],n,);
- int m;
- scanf("%d",&m);
- if(minv[]>=) puts("TAK");
- else puts("NIE");
- for(int i=,x,v;i<=m;i++)
- {
- scanf("%d%d",&x,&v);
- v = n-v+;
- add(,,n,a[x],n,-);
- add(,,n,v,n,);
- a[x] = v;
- if(minv[]>=) puts("TAK");
- else puts("NIE");
- }
- return ;
- }
Permutacja的更多相关文章
随机推荐
- 查询SQL2008字段和注释
SELECT 表名 then d.name else '' end, 表说明 then isnull(f.value,'') else '' end, 字段序号 = a.colorder, 字段名 = ...
- EntityFramework走马观花之CRUD(中)
如果是独立的实体对象,在底层数据库中它对应一张独立的表,那么,对它进行新建.删除和修改没有任何难度,实在不值浪费笔墨在它上头. 在现实项目中,完全独立的对象少之又少,绝大多数情况都是对象之间有着紧密的 ...
- 【BZOJ4012】[HNOI2015]开店 动态树分治+二分
[BZOJ4012][HNOI2015]开店 Description 风见幽香有一个好朋友叫八云紫,她们经常一起看星星看月亮从诗词歌赋谈到人生哲学.最近她们灵机一动,打算在幻想乡开一家小店来做生意赚点 ...
- Linuxt图形界面安装
通常安装图形界面需要安装Xorg.桌面环境(Gnome.KDE.xfce等).字体等.你的Linux是什么版本?具体要看你的linux来决定用什么命令来安装. #yum grouplist 自己看看列 ...
- zookeeper curator ( 实战一)
目录 zookeeper 的伪集群搭建 写在前面 1.1. zookeeper 安装&配置 1.1.1. 创建数据目录和日志目录: 1.1.2. 创建myid文件 1.1.3. 创建和修改配置 ...
- 性能测试--yslow
YSlow YSlow可以对网站的页面进行分析,并告诉你为了提高网站性能,如何基于某些规则而进行优化. YSlow可以分析任何网站,并为每一个规则产生一个整体报告,如果页面可以进行优化,则YSlow会 ...
- JSDuck 安装---mac
1. 如果你已经安装了xcode,安装Xcode command line tools,在终端输入 xcode-select --install 2.install RVM \curl -sSL h ...
- Spring-data-redis:特性与实例(转载)
原文地址:http://www.cnblogs.com/davidwang456/p/4915109.html Spring-data-redis为spring-data模块中对redis的支持部分, ...
- 扫盲--.net 程序集
前言:用了几天的时间把高级编程里面程序集一章看完了,原来自己只知道写代码,右键添加引用,从来也不知道操作的实质是什么,微软总是这个套路,鼠标点点就能把任务完成,这对新手友好但是对要通透了解程序执行和内 ...
- Java for LeetCode 129 Sum Root to Leaf Numbers
Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number ...