题意:

要求动态求问是否有一个 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的更多相关文章

随机推荐

  1. mongodb 配置单实例与双实例

    环境: centos6.5 192.168.16.70 配置单实例mongodb:[root@www soft]# tar xf mongodb-linux-x86_64-rhel62-3.2.7.t ...

  2. 九度OJ 1016:火星A+B (进制转换)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4913 解决:1334 题目描述:     读入两个不超过25位的火星正整数A和B,计算A+B.需要注意的是:在火星上,整数不是单一进制的, ...

  3. mysql系列之3.mysql进阶

    启动原理 mysqld脚本-->mysqld_safe脚本-->mysqld服务-->启动mysql 强制关闭mysql: 三种方法, 不建议用! killall mysqld pk ...

  4. ABAP 关键字(1)

    1.定义DATA ,TYPES TYPES关键字用于创建自定义数据类型,就像JAVA里面创建类一样,用TYPES创建的数据类型可以被其它变量引用(类似于实例化对象),而本身不能直接引用或者赋值. DA ...

  5. Spring IOC 容器源码分析(转)

    原文地址 Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器.既然大家平时都要用到 Spring,怎么可以不好好了解 Spring 呢 ...

  6. Java for LeetCode 105 Construct Binary Tree from Preorder and Inorder Traversal

    Given preorder and inorder traversal of a tree, construct the binary tree. Note: You may assume that ...

  7. Android Weekly Notes Issue #320

    Android Weekly Issue #320 July 29th, 2018 Android Weekly Issue #320 本期内容包括: Firebase的MLKit; 关于写Andro ...

  8. SPOJ - GSS1 —— 线段树 (结点信息合并)

    题目链接:https://vjudge.net/problem/SPOJ-GSS1 GSS1 - Can you answer these queries I #tree You are given ...

  9. Sql 工资第二高(考虑并列)

    --题目:Employee表中有ID,Name,Salary三列,求薪资排序第二高的Employee的Name select * FROM [Employee] --等于2时为空,因为有并列第一 SE ...

  10. Linux bash shell环境变量以及语法规范

    摘自: http://blog.csdn.net/abc_ii/article/details/8762739