摘要:
题意: 每次翻转一段区间,询问翻转区间后整个序列的逆序对数量。 题解: 每次翻转区间,那么翻转区间的答案就是整个序列的原始答案减去这个区间里逆序对的数量加上顺序对的数量。 统计逆序对和顺序对用树状数组做。 #include<bits/stdc++.h> using namespace std; co 阅读全文
摘要:
给出m种花,对于每一种花,购买第一束可以带来ai的开心值,之后买第二束、第三束会增加bi...你可以购买n种花,询问怎么设计购买方案,使得总开心值最大。 #include<bits/stdc++.h> using namespace std; const int maxn=2e5+100; type 阅读全文
摘要:
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=105; const int mod=1e9+7; int n; struct matrix { ll a[maxn][maxn]; m 阅读全文
摘要:
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=3e5+100; const int mod=998244353; ll fpow (int x,int y) { ll ans=1; 阅读全文
摘要:
题意: 定义一种特殊的加法,这种加法没有进位,其他与普通加法一样,比如16+16=212。 给出一个数,询问这个数可能被哪两个数用特殊加法构成,并且每次询问修改这个数数位上的一个数字,输出更新后的答案。 题解: 矩阵乘法优化dp 矩阵乘法可以用来加速线性递推式。 以斐波那契数列为例: f[n] = 阅读全文
摘要:
/* *1380E.Merging Towers *给出半径为1~n的n个盘子和m个塔,要求每个塔上盘子的半径始终从底向上递减 *一次操作可以将一个塔上的任意个盘子移动到另一个塔的顶部。 *令某一情形下的复杂度为将所有盘子移动到同一个塔上所需的最小操作数。 *题目给出m-1次询问,每次询问时输出当前 阅读全文
摘要:
/* *CF1380D.Berserk And Fireball *n个战士站成一排,分别有武力值ai。 *你有两种法术:火球和激怒。 *火球可以消耗x个法力,消灭连续k个战士。 *激怒可以消耗y个法力,选择相邻的两个战士,武力值大的会消灭武力值小的 *求最后留下的战士和数组b一样所需要的最小法力花 阅读全文
摘要:
#include<bits/stdc++.h> using namespace std; const int maxn=2e5+100; int t; int n; int a[maxn]; int b[maxn]; vector<int> g[maxn]; int visit[maxn]; vec 阅读全文
摘要:
题意: 给出一棵树,每次可以剪掉同一顶点的k个叶子,询问最多能剪几次。 题解: 如果k是1,那么答案就是n-1。 然后开一个队列,每次把叶子数大于k的叶子入队,取出队头的时候更新叶子数。全学jiangly的。 #include<bits/stdc++.h> using namespace std; 阅读全文
摘要:
A.TPM 给出三个元素x,y,z,x表示max(a,b),y表示max(a,c),z表示max(b,c),请输出xyz。 推导后发现较大的两个元素必须一样,否则无解,然后输出两遍较小的元素,一遍较大的元素即可。 #include<bits/stdc++.h> using namespace std 阅读全文