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

8.15

  • 主席树

https://www.luogu.org/blog/chengni5673/tu-lun-di-xiao-ji-qiao-yi-ji-kuo-zhan

8.16

  • boss1
  • 数论

8.17

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;
}
posted @ 2019-10-08 14:58  设计涉及社稷  阅读(109)  评论(0编辑  收藏  举报