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的更多相关文章
随机推荐
- 【Java并发编程实战】—–“J.U.C”:ReentrantLock之二lock方法分析
前一篇博客简介了ReentrantLock的定义和与synchronized的差别,以下尾随LZ的笔记来扒扒ReentrantLock的lock方法.我们知道ReentrantLock有公平锁.非公平 ...
- activemq 安装-单点
一,准备工作:首先安装jdk1.7及其以上版本,此环境安装的是jdk-1.8 二.搭建activemq 环境: 192.168.9.25 centos6.5 ...
- ms人物上线
在看MS人物上线 else if(gs2ms_add_player == pkt.cmd) { PlayerChannel* pPC = new PlayerChannel(this); //加到地图 ...
- 【BZOJ4373】算术天才⑨与等差数列 线段树+set
[BZOJ4373]算术天才⑨与等差数列 Description 算术天才⑨非常喜欢和等差数列玩耍.有一天,他给了你一个长度为n的序列,其中第i个数为a[i].他想考考你,每次他会给出询问l,r,k, ...
- sql中decode()重要函数使用
decode()函数简介: 主要作用:将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明): 使用方法: Select decode(columnname,值1,翻译值1,值2,翻译值2,.. ...
- BZOJ1815: [Shoi2006]color 有色图
BZOJ1815: [Shoi2006]color 有色图 Description Input 输入三个整数N,M,P 1< = N <= 53 1< = M < = 1000 ...
- SAP增强 和VA01相关增强点介绍
-转 sap寻找用户出口方法 sap的用户出口总共有三代: 一.User EXIT 第一代的用户出口,它们include在SAP标准程序的源代码里,可以说他们是源代码的一部分,你改了这种出口就相当于改 ...
- margin的相关属性及应用
1.margin常见问题: ①IE6下双边距 (不推荐使用float+margin,可用padding替代) 详见<css浏览器兼容问题集锦>之4.IE6中margin双边距 ②IE6 ...
- 使用python转换编码格式
之前有写过一个使用powershell转换文档格式的方法,然而因为powershell支持不是很全,所以并不好用.这里使用python再做一个. 思路 检测源码格式,如果不是utf8,则进行转换,否则 ...
- C# 关于线程锁lock的使用方法
C# 关于线程锁lock的使用方法 原创 2016年09月02日 10:07:05 标签: c# / 线程 / 锁 / lock 11937 在多线程编程中,可能会有许多线程并发的执行一段代码(代码块 ...