8.14
学习任务
并查集- 堆
 - 线段树树状数组基础
 - 差分约束
 
P1631 序列合并
假设此时要把 a[i]+b[j]插入堆,且(i-1)*(j-1)>N,那么这个数一定不会是最后的答案,因为对于1<=s<i,1<=t<j,可组成的和已经超过N个,且都要比a[i]+b[j]小。
每日进阶
//每日一题搜索和动态规划
8.11
8.12
8.13
8.14
并查集堆- 线段树树状数组基础
https://www.cnblogs.com/cjyyb/p/8567674.html - 差分约束
 
8.15
- 主席树
 
https://www.luogu.org/blog/chengni5673/tu-lun-di-xiao-ji-qiao-yi-ji-kuo-zhan
- 分层图最短路-学习
http://47.92.113.238/qxiangya/?p=316 神奇的解法- 强连通分量
 - 倍增
 
8.16
- boss1
 - 数论
 
8.17
- boss2
 - 博弈论
https://www.luogu.org/blog/wym483739/bo-yi-lun
https://www.luogu.org/blog/wym483739/bo-yi-lun-di-er-pa 
8.18
- boss3
 - 其他数学问题
 
https://www.luogu.org/blog/Imakf/solution-p1196
LCT 之银河英雄传说
https://www.cnblogs.com/flashhu/p/9480669.html#4314782
DP的各种优化(动态规划,决策单调性,斜率优化,带权二分,单调栈,单调队列)
https://www.cnblogs.com/zwfymqz/p/7801080.html
各种算法时空复杂度
https://www.cnblogs.com/zwfymqz/p/8696631.html
bitset
https://www.cnblogs.com/zwfymqz/p/8869956.html#_labelTop
prufer序列笔记
https://www.cnblogs.com/flashhu/p/9568368.html
组合数
https://www.cnblogs.com/flashhu/p/10190408.html
数论
https://www.cnblogs.com/flashhu/p/8437062.html
http://hzwer.com/8053.html#comment-8306
分块
https://www.cnblogs.com/flashhu/p/9743679.html
k短路
https://www.cnblogs.com/flashhu/p/9707295.html
0/1分数规划
https://blog.hookan.top/2018/10/16/kruskal_tree/
kruskal重构树
https://www.cnblogs.com/flashhu/p/9651161.html
有趣的线段树模板合集(线段树,最短/长路,单调栈,线段树合并,线段树分裂,树上差分,Tarjan-LCA,势能线段树,李超线段树)
黑匣子
/*#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rep(i,a,b) for(ll i=a;i<=b;++i)
#define dwn(i,a,b) for(ll i=a;i>=b;--i) 
template <typename T> inline void rd(T &x){x=0;char c=getchar();int f=0;while(!isdigit(c)){f|=c=='-';c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}x=f?-x:x;} 
#define mem(a,b) memset(a,b,sizeof(a))
#define N 200010
int m,n;
int a[N];
vector<int>v;
int main(){
	freopen("fhq.txt","r",stdin);
	rd(m),rd(n);
	rep(i,1,m)rd(a[i]);
	int l=1,r;
	rep(i,1,n){
		rd(r);
		rep(j,l,r) 
			v.insert(lower_bound(v.begin(),v.end(),a[j]),a[j]);
		l=r+1;
		printf("%d\n",v[i-1]);
	}
	return 0;
}*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rep(i,a,b) for(ll i=a;i<=b;++i)
#define dwn(i,a,b) for(ll i=a;i>=b;--i) 
template <typename T> inline void rd(T &x){x=0;char c=getchar();int f=0;while(!isdigit(c)){f|=c=='-';c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}x=f?-x:x;} 
#define mem(a,b) memset(a,b,sizeof(a))
#define N 200010
int m,n,size,k=1;
int a[N],t[N];
priority_queue<int>dgd;
priority_queue<int,vector<int>,greater<int> >xgd;
int main(){
	freopen("fhq.txt","r",stdin);
	rd(m),rd(n);
	rep(i,1,m)rd(a[i]);
	int l=1,r;
	rep(i,1,n){
		rd(r);
		rep(j,l,r){
			dgd.push(a[j]);
			if(dgd.size()==i)xgd.push(dgd.top()),dgd.pop();//保持dgd只有i-1个数
		}
		l=r+1;
		printf("%d\n",xgd.top());
		dgd.push(xgd.top()),xgd.pop();
	}
	return 0;
}
最小函数值
/*
reference:
	
translation:
	
solution:
	
trigger:
	
note:
	*int 数组最多开3*10^7 
record:
	交了n发20pts,看了看题解,只要暴力的枚举x:1~100即可ac……
date:
	2019.08.14
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define dwn(i,a,b) for(int i=a;i>=b;--i) 
template <typename T> inline void rd(T &x){x=0;char c=getchar();int f=0;while(!isdigit(c)){f|=c=='-';c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}x=f?-x:x;} 
#define mem(a,b) memset(a,b,sizeof(a))
#define N 10010
int n,m,cnt;
struct data{
	int a,b,c;
}e[N];
priority_queue<int,vector<int>,greater<int> >q;
int main(){
	freopen("fx.txt","r",stdin);
	rd(n),rd(m);
	rep(i,1,n){
		rd(e[i].a),rd(e[i].b),rd(e[i].c);
	}
	rep(i,1,n)
		rep(j,1,100){
			q.push(e[i].a*j*j+e[i].b*j+e[i].c);
		}
	rep(i,1,m){
		printf("%d ",q.top());
		q.pop();
	}
	return 0;
}
鬼谷子的钱袋
/*
reference:
	https://www.luogu.org/blog/zyb2624936151/solution-p2320
translation:
	
solution:
	分治思想 
	如我们要算的是10,必须有1。如果要组成的一个数能由一部分加上另一部分组成就会很好了,10可以分成1~5和6~10,6~10可以由1~5加5组成,所以要选5,接下来只要组成1~5就可以了。就把5除2,一直这样。这很像倍增。所以只要一直这样就可以了。
trigger:
	
note:
	* 除以2的时候(被除数+1)/2 
record:
date:
	2019.08.14
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rep(i,a,b) for(ll i=a;i<=b;++i)
#define dwn(i,a,b) for(ll i=a;i>=b;--i) 
template <typename T> inline void rd(T &x){x=0;char c=getchar();int f=0;while(!isdigit(c)){f|=c=='-';c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}x=f?-x:x;} 
#define mem(a,b) memset(a,b,sizeof(a))
int n,tot;
int a[40];//1000000000
int main(){
	rd(n);
	while(n){
		a[++tot]=n+1>>1;
		n>>=1;
	}
	printf("%d\n",tot);
	dwn(i,tot,1)
		printf("%d ",a[i]);
	return 0;
}

                
            
        
浙公网安备 33010602011771号