![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树状数组
【杰杰】
这个作者很懒,什么都没留下…
展开
-
D. Yet Another Sorting Problem
传送门题意:给你一个序列,每次操作选择三个下标,使得选择的这三个下标的数以环形互相移动(即1,2,3变为3,1,2),问你经过任意次的操作后,这个序列能不能变为非递减序列。思路:首先考虑序列中是否存在两个相同的数。若存在:那么每两次操作都可以将两个不处于正确位置的数移动到正确位置。若不存在:那么可以证明:每次操作都会让整个序列的逆序对进行偶数次的改变,最终,如果初始序列的逆序对为偶数,则“YES”,否则“NO”。#include<bits/stdc++.h>using name原创 2022-03-03 17:26:44 · 269 阅读 · 0 评论 -
树状数组求逆序对
每次按顺序将序列依次加入树状数组d[x]中,d[x]表示当前1到x中有多少数出现,每次加入的时候判断已有的比加入的数大的数。添加:因为数x会对比它小的数做出贡献,因而应该往下更改树状数组。void add(int x){ while(x >= 1) { d[x]++; x -= lowbit(x); }}查询从数x开始一直网上累加,算出当前已有的数中比x-1大的数的个数。int ask(int x){ int ans = 0; while(x <= n)原创 2021-08-03 00:31:32 · 84 阅读 · 0 评论 -
牛客4 Inverse Pair
传送门思路:树状数组求逆序对。#include<bits/stdc++.h>using namespace std;#define ll long longconst ll mod = 1e9+7;ll a[200010];ll vis[200010];ll d[200010];int n;int lowbit(int x){ return x&-x;}void add(int x){ while(x >= 1) { d[x]++; x原创 2021-08-01 22:17:08 · 98 阅读 · 0 评论 -
校门外的树
校门外有很多树,学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两种操作:K=1,读入 l,r 表示在 l 到 r 之间种上一种树,每次操作种的树的种类都不同;K=2,读入 l,r 表示询问 l 到 r 之间有多少种树。注意:每个位置都可以重复种树。Input第一行 n,m 表示道路总长为 n,共有 m 个操作;接下来 m 行为 m 个操作。Output对于每个 k=2 输出一个答案。#include<bits/stdc++.h>using n原创 2021-03-14 16:03:39 · 193 阅读 · 0 评论 -
I Hate It
很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。这让很多学生很反感。不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。Input本题目包含多组测试,请处理到文件结束。在每个测试的第一行,有两个正整数 N 和 M ( 0<N<=200000,0<M<5000 ),分别代表学生的数目和操作的数目。学生ID编号分别从1编到N。第二行包含N个整数,代表这N个学生的初始成绩,转载 2021-03-13 19:05:52 · 80 阅读 · 0 评论 -
敌兵布阵
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视。中央情报局要研究敌人究竟演习什么战术,所以Tidy要随时向Derek汇报某一段连续的工兵营地一共有多少人,例如Derek问:“Tidy,马上汇报第3个营地原创 2021-03-13 16:30:21 · 63 阅读 · 0 评论