题意:

要求动态求问是否有一个 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. EasyNVR H5无插件摄像机直播解决方案前端解析之:videojs初始化的一些样式处理

    初始化完成对videojs样式的调整 由于不同项目的需要,对于加载出来的videojs播放器样式也有不同的需求:我们需要自主的处理一下加载出来的videojs播放器的样式: 默认加载出来的会包含有暂停 ...

  2. iOS UIWebview添加请求头的两种方式

    1.在UIWebviewDelegate的方法中拦截request,设置request的请求头,废话不多说看代码: - (BOOL)webView:(UIWebView *)webView shoul ...

  3. 1、找出url汇总页,过滤出满足条件的详情页url;2、去详情页采集信息

    1.找出url汇总页,过滤出满足条件的详情页url:2.去详情页采集信息 package main import ( "fmt" "github.com/gocolly/ ...

  4. FastJson 技术

    最近开始做淘宝的开放平台.阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征: 速度最快,测试表明,fastjson具有极快的性能,超越任其他的Jav ...

  5. 我的Java开发学习之旅------>Java经典排序算法之冒泡排序

    冒泡排序(Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已 ...

  6. 我的Java开发学习之旅------>工具类:将播放器的进度值转换成相应的时间格式

    在我的博客<我的Java开发学习之旅------>Java 格式化类(java.util.Formatter)基本用法,地址:http://blog.csdn.net/ouyang_pen ...

  7. IDEA tomcat三步实现热部署

    IDEA tomcat三步实现热部署 添加Artifacts选项 添加Artifacts选项,XXXwar 和 XXXwar exploded二选一,若要热部署须选后者. 设置tomcat部署方案 设 ...

  8. python_learn1

    1.python在命令行获取当前的路径. import os os.getcwd() os.chdir(r"C:\Users\szlon\Desktop\pythonexer") ...

  9. (C)结构数组

    结构数组 对于大小相同但是类型不同的数组,定义结构体数组对其很有帮组.例如: char *keyword[NKEYS]; int keycount[NKEYS]; 这两个数组大小相同,因此 可以用另一 ...

  10. camera报错经典问题

    --- 33u>: error: undefined reference to 'NSFeature::RAWSensorInfo<22133u>::impGetDefaultDat ...