首页 > TAG信息列表 > 50005

POJ 3264 Balanced Lineup

题目链接:POJ 3264 Balanced Lineup 题目大意: 题解: ST表模板。 #include <cstdio> #include <cstring> #include <iostream> using namespace std; int num[50005], minn[50005][50], maxn[50005][50], n, q; void stPreWork() { for (int i = 1; i <= n; ++i

NKOJ-2936 城市建设

问题描述: PS国是一个拥有诸多城市的大国,国王Louis为城市的交通建设可谓绞尽脑汁。Louis可以在某些城市之间修建道路,在不同的城市之间修建道路需要不同的花费。Louis希望建造最少的道路使得国内所有的城市连通。但是由于某些因素,城市之间修建道路需要的花费会随着时间而改变,Louis

[SDOI2009]HH的项链解题报告

原题目:洛谷P1972 题目描述 HH 有一串由各种漂亮的贝壳组成的项链。HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH 不断地收集新的贝壳,因此,他的项链变得越来越长。有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同的贝壳?这

EOJ二月月赛补题

A:昔我往矣 lca+dfs序,先做出所有点的dfs序,然后对于每一个询问,以dfs序最小和最大的为两个端点,然后往里面加点相当于加上一条分叉出去的链,用LCA求解即可。 下附代码: 1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 const ll INF=0X3f3f3f3f3f

LG P7324 [WC2021] 表达式求值

Description 定义二元操作符 $<$:对于两个长度都为 $n$ 的数组 $A,B$(下标从 $1$ 到 $n$),$A<B$ 的结果也是一个长度为 $n$ 的数组,记为 $C$。则有 $C[i] = \min(A[i], B[i])(1 \le i \le n)$。 定义二元操作符 $>$:对于两个长度都为 $n$ 的数组 $A,B$(下标从 $1$ 到 $n$),$A>B$ 的结果也是

LG P3247 [HNOI2016]最小公倍数

Description 给定一张N个顶点M条边的无向图(顶点编号为1,2,...,n),每条边上带有权值。所有权值都可以分解成$2^a*3^b$的形式。 现在有q个询问,每次询问给定四个参数u、v、a和b,请你求出是否存在一条顶点u到v之间的路径,使得路径依次经过的边上的权值的最小公倍数为$2^a*3^b$。 注意:路

VJ Balanced Lineup(ST表)

原题 一道很裸的RMQ,线段树专题里刷的,直接打ST表就好。 #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> using namespace std; typedef long long ll; ll f1[50005][20],f2[50005][20],a[50005];//二维数组别开太大,不然MLE了 int n,q,l,r; void ST_prew

[bzoj1044]木棍分割

第一个问题可以用贪心+二分解决第二个问题用f[i][j]表示i次分割后分割到j且满足条件的方案数,$f[i][j]=\sum_{k<j且sum[j]-sum[k]<=ans}f[i-1][k]$优化时间:前缀和优化,二分要先预处理出来(也可以用优先队列)优化空间:发现f并没有什么用处,只需要记录前缀和数组,再对其滚动即可 1 #incl

hwzer分块九讲

1.区间加法,单点查询 #include<bits/stdc++.h>using namespace std;int n,opt,m,a[50005],vc,x,y,tg[50005],blo,tag[50005];int read(){ long long x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar(

GSS系列

GSS1 直接维护静态区间和即可 #include<bits/stdc++.h>using namespace std;const int N=50005;int n,a[N];struct Seg_Tree{int lmax,rmax,dat,sum;}tr[N<<2];inline void pushup(int k){ tr[k].sum=tr[k<<1].sum+tr[k<<1|1].sum; tr[k].lmax=max(tr[k&l

Codeforces - 1194B - Yet Another Crosses Problem - 水题

https://codeforc.es/contest/1194/problem/B 好像也没什么思维,就是一个水题,不过蛮有趣的。意思是找缺黑色最少的行列十字。用O(n)的空间预处理掉一维,然后用O(n)的时间根据另一维计算出答案。 #include<bits/stdc++.h> using namespace std; typedef long long ll; int n, m; str

bzoj 2301

一道莫比乌斯反演入门题。 首先观察题目要求:的数对数 首先可以发现,这个东西同时有上界和下界,所以并不是很容易计算 那么我们变下形,可以看到:原式= 是不是清晰很多了?(当然没有!) 不,这一步很重要的目的在于消去了下界,使得我们的计算更方便了。 而且可以发现这四个式子的形式是一样的

连号区间数

超时,60分 #include<cstdio>#include<iostream>#include<algorithm>#include<vector> #include<string>#include<queue>#include<map>using namespace std;int a[50005];int temp[50005];int main(){ int n; cin>>n;

P2678 跳石头

一道二分答案题,判断时只需将距离遍历一遍,即可统计出需要移走多少块石头 #include<cstdio> using namespace std; int a[50005], n, m, t; bool judge(int x) { int s = 0, now = 0; for(int i = 1; i <= n; i++) { if(a[i] - a[now] < x) s++;