(话说其实我想填的是去年CSP的坑...但是貌似有一道题我还不会写咕咕咕...

先写一下这一次的题解吧.
T1:序列.题意省略。

两种操作。这种题要先分析部分分 给出了全部都是2操作的子任务。

发现A 2 B,B 2 C这个时候可以推到 A 2 C也就是所以被2相连的点都存在这种关系。

考虑缩点 把这些点都缩到一起表示他们的权值可以随便传递.

这个时候对于当前子任务我们可以很容易回答,就是看某个集合的权值和是否为0.

考虑有操作1的时候 A 1 B B 1 C 可以发现这可以转换成 A 2 C 转换成这样做之后我们再次把2操作进行缩点。

那么整张图变成了什么?对于1操作直接连边然后看能否缩点 2操作直接缩点 所以整张图变成了若干个联通块 且每个联通块至多只有两个点。

我们简单的分析一下什么时候有解,分类讨论一下即可。

值得一提的是对于1操作变2操作时我们连边需要拿2操作过后缩过的点连边,否则可能会出现(a,b) (c,d) 而c和d之前被缩起来了。
可以证明拿缩过点连边是正确的。(这个地方是坑点 考试的时候这个地方我就没考虑到。
```
const int MAXN=100010;
int n,m,cnt,flag,len,T;
int f[MAXN],vis[MAXN];ll a[MAXN];
int lin[MAXN],ver[MAXN我们很容易就可以得到一个非常暴力的模拟算法。

但是我们想要不去模拟就必须要知道每轮冒泡排序改变的是什么东西.

每一轮冒泡 整个序列中 未到位的最大值一定会交换到后面,这个时候考虑一下这个最大值所处的位置 如果为p的话,其应该到的位置为pos 那么说明p+1~pos这些数字对逆序对的贡献减一 (如果这个数字每次都在排头那么我们就可以不用知道序列是什么样子而直接求出来逆序对的变换情况了。

考虑这个最大值p之前的位置会怎么变换 可以发现还是一个较大值被交换到p+1这个位置然后轮到p开始交换。

至此我们不难发现每次冒泡某个数字之前如果有比其大的数字那么这种数字至少减少1.

设b[i]为i之前有多少个比i大的数字.那么进行k轮 每次每个位置上的b[i]都要减减.

答案=ans-$\sum{min(b[i],k)}$ans为初始序列的逆序对个数.这个显然可以利用线段树维护。

考虑修改 ans修改是O(1)的 b[i]的修改也仅限于一个位置 所以这是一个区间求和单点修改的问题.

树状数组好像需要两个才能维护 直接线段树即可.
```
const int MAXN=200010;
int n,m;
int a[MAXN],b[MAXN];
ll c[MAXN],ans;
inline int ask(int x)
{
int cnt=0;
while(x)
{
cnt+=c[x];
x-=x&(-x);
}
return cnt;
}
inline void add(int x,int y)
{
if(!x)return;
while(x>1;
build(pr)return;
if(l=t[p].r)
{
t[p].add+=k;
t[p].sum+=k*(t[p].r-t[p].l+1);
return;
}
spread(p);
long long mid=(t[p].l+t[p].r)>>1;
if(lmid)change(pr)return 0;
if(l=t[p].r)return t[p].sum;
spread(p);
long long mid=(t[p].l+t[p].r)>>1;
long long ans=0;
if(lmid)ans+=ask(pa[x+1])
{
change(1,b[x+1],b[x+1],-1);
--b[x+1];--ans;
swap(a[x],a[x+1]);
swap(b[x],b[x+1]);
}
else
{
change(1,b[x]+1,b[x]+1,1);
++b[x];++ans;
swap(a[x],a[x+1]);
swap(b[x],b[x+1]);
}
}
else
{
x=min(x,n);
ll w=ask(1,1,x);
printf("%lld\n",ans-w);
}
}
return 0;
}
```
ps:发现这个代码中的线段树长的不太好看了吧,这是很早以前的代码了,考试的时候为了节省时间直接粘了个板子.
T3:最小环.

当时写的时候时间不太够用了 因为T1debug时间过长。。

观察子任务有两个点k==1 简单分析一下什么时候形成的环最大 amax-4,amax-2,amax,amax-1,amax-3...这样排列。

这样计算可以发现能把样例算出来,关于证明:交换任意两个数的位置得到的结果不会比原来更优 所以这样排列就是最优的。

还有一个子任务n为偶数且k==2 我们发现此时形成了两个环。把n分一半套用上述k==1的做法即可解决。

对于$k\leq \frac{n}{2}$我们发现n和k互质的时候也只会形成一个环和k==1一样。

我们只需要知道对于一个k来说最终形成的环的个数有多少个 再把数分开单独计算每一个环即可。

可以发现形成环的个数为 gcd(n,k).

$n\leq 200000$ d(n)最多280..每次暴力计算每个环O(n) 所以总复杂度$d(n)\cdot n$.d(n)表示n的因子个数。
```
const ll MAXN=200010;
ll n,m;
ll a[MAXN],sum;
ll ans[MAXN];
inline ll cmp(ll a,ll b){return a>b;}
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
int main()
{
//freopen("1.in","r",stdin);
//freopen("ring.out","w",stdout);
n=read();m=read();
for(ll i=1;i

NOI On Line 提高组题解的更多相关文章

  1. noip2010提高组题解

    NOIP2010提高组题解 T1:机器翻译 题目大意:顺序输入n个数,有一个队列容量为m,遇到未出现元素入队,求入队次数. AC做法:直接开1000的队列模拟过程. T2:乌龟棋 题目大意:有长度为n ...

  2. NOIP 2014 提高组 题解

    NOIP 2014 提高组 题解 No 1. 生活大爆炸版石头剪刀布 http://www.luogu.org/problem/show?pid=1328 这是道大水题,我都在想怎么会有人错了,没算法 ...

  3. NOIP 2001 提高组 题解

    NOIP 2001 提高组 题解 No 1. 一元三次方程求解 https://vijos.org/p/1116 看见有人认真推导了求解公式,然后猥琐暴力过的同学们在一边偷笑~~~ 数据小 暴力枚举即 ...

  4. NOIP 2000 提高组 题解

    NOIP2000 提高组 题解 No 1. 进制转换 https://www.rqnoj.cn/problem/295 水题 对于n和基数r, 每次用n mod r, 把余数按照逆序排列 注意 mod ...

  5. 【NOIP2018】提高组题解

    [NOIP2018]提高组题解 其实就是把写过的打个包而已 道路铺设 货币系统 赛道修建 旅行 咕咕咕 咕咕咕

  6. luogu P6570 [NOI Online #3 提高组]优秀子序列 二进制 dp

    LINK:P6570 [NOI Online #3 提高组]优秀子序列 Online 2的T3 容易很多 不过出于某种原因(时间不太够 浪了 导致我连暴力的正解都没写. 容易想到 f[i][j]表示前 ...

  7. [NOI Online 2021 提高组] 积木小赛

    思路不说了. 想起来自己打比赛的时候,没睡好.随便写了个\(HASH\),模数开小一半分都没有. 然后学了\(SAM\),发现这个判重不就是个水题. \(SAM\)是字串tire的集合体. 随便\(d ...

  8. [NOI Online #2 提高组]涂色游戏 题解

    题目描述 你有 1020 个格子,它们从 0 开始编号,初始时所有格子都还未染色,现在你按如下规则对它们染色: 编号是 p1 倍数的格子(包括 0号格子,下同)染成红色. 编号是 p2 倍数的格子染成 ...

  9. NOI Online 提高组 题解

    来补坑了-- 个人认为三道题难度差不多-- 还有要说一嘴,为啥我在其他网站代码都好好的,复制到 cnblogs 上 Tab 就成 8 空格了?不过也懒得改了. T1 序列 首先,遇到这种加一减一还带附 ...

随机推荐

  1. 网页不让用户复制方法总汇,设置html禁止选择,保护源码,js禁止复制文字

    这篇文章主要讲解:右键复制失效方法.菜单"文件"-"另存为"失效方法.防止查看源代码进行复制的方法.防止页面缓存的方法.来达到一定的代码保护效果 右键复制失效方 ...

  2. HBase2.0 meta信息丢失的修复方法

    在HBase入库日志中发现有一个表入库失败,检查HBase服务端后发现该表的meta信息丢失了: 而HDFS上的region还在: 而HBCK工具不支持HBase2.0版本,只好自己写一个修复工具.网 ...

  3. 重学 Java 设计模式:实战策略模式「模拟多种营销类型优惠券,折扣金额计算策略场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 文无第一,武无第二 不同方向但同样努力的人,都有自身的价值和亮 ...

  4. 「疫期集训day13」雾天

    我们千里迢迢赶来这里支援协约国----与德军正面交锋的美国士兵 今天考试签到题都没A,失误重大,T1几周前做过的拓扑排序板子都没写,T2失误在没敢调试,对自己信心不足,30分钟写了个DP,几分钟没调出 ...

  5. Tallest Cow,题解

    题目链接 题意: 问满足一系列形如ab可以相互看到的约束的所有奶牛的最大身高(最高的编号和高度已给出) 分析: 首先,这个可以互相看到指的是中间的人比两头的都矮,一条斜线看到的不行,那么其实我们就可以 ...

  6. 测试必备工具之抓包神器 Charles 如何抓取 https 数据包?

    之前发过一篇文章讲解了Charles抓包工具的基本使用(有需要的小伙伴可以去看上一篇文章),  讲的数据包主要是http协议,大家可以看到数据包并直接显示具体详细的内容: 但是如果抓到的是https的 ...

  7. postman 进阶技巧

    cookie 清除缓存 code 生成接口自动化测试脚本 响应部分 pretty 响应以json或xml显示 raw 响应以文本显示 preview 以HTML网页行驶显示 断言 断言:用于判断接口请 ...

  8. 关于Pop!_OS 19.04有线网络始终正在连接

    一开始使用Pop!_OS时就遇到这个问题,开机进入系统后明明网络没问题,WiFi正常可用, 但是插入网线后有线网络始终显示正在连接,然后可能过一会儿还会弹出来网络激活失败. 但是有可能在使用很久之后再 ...

  9. Spring @Value注解使用${}进行注入(转)

    原文:http://my.oschina.net/js99st/blog/632104 spring3中新增的@value注解 http://bijian1013.iteye.com/blog/202 ...

  10. 机器学习实战基础(十五):sklearn中的数据预处理和特征工程(八)特征选择 之 Filter过滤法(二) 相关性过滤

    相关性过滤 方差挑选完毕之后,我们就要考虑下一个问题:相关性了. 我们希望选出与标签相关且有意义的特征,因为这样的特征能够为我们提供大量信息.如果特征与标签无关,那只会白白浪费我们的计算内存,可能还会 ...