ooo

P3372 【模板】线段树 1

橙三吉。 提交于 2019-12-13 21:20:08
Miku ------------------------ 线段是是一种非常重要的数据结构,尤其在暴力时候 ------------------------- 线段树我觉得就是一个暴力的暴力的暴力数据结构,支持许多操作,比如说最大值,最小值,区间加,区间和等 ------------------------ 线段树的优化关键在于一个懒标记 ------------------------ 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 using namespace std; 5 struct kk{ 6 int l,r;//每一个节点包含的左右区间 7 long long add,tql;//每一个节点的lazy和区间和 8 }t[10000005]; 9 long long n,m,a[10000005],p,x,y,pp; 10 void build(int x,int y,int z){ 11 t[x].l=y; t[x].r=z;//这个点的控制的左右区间 12 if(y==z){//一开始,只有叶节点赋值 13 t[x].tql = a[y]; 14 return ; 15 } 16 int midd =(y+z)>>1;//中间点,因为线段树就是从中间开始分裂的 17 build(2*x

map排序及keyset顺序问题

匿名 (未验证) 提交于 2019-12-03 00:30:01
import java.sql.Timestamp; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; import java.util.TreeMap; public class Test2 { /** * @param args */ public static void main(String[] args) { //////////////////////////////////////////////////////////// / // TEST //////////////////////////////////////////////////////////// / System.out.println("## Hashtable ##"); Hashtable<String , String> ht = new Hashtable<String , String>(); ht.put("1", "OOO"); ht.put("3", "OOO"); ht.put("2", "OOO"); ht.put(

bzoj2067: [Poi2004]SZN

我的未来我决定 提交于 2019-11-27 00:41:11
bzoj2067: [Poi2004]SZN 一开始没看出来是贪心,还以为是树规,多亏ooo提醒一句,然后刚了一个半小时搞出来了。 首先‘最长线最短’二分没错了,想了想他确实是单调的,最长线越长,用的线就越短(注意这里的最长线只是不超过,并不是一定要达到)。 二分最长线长度,对于已知的最长线长度len,考虑如何求解最少线数。 树里有什么特殊的点吗?叶子节点,叶子节点一定是一条线的一个端点。所以从叶子节点开始,一条线最优肯定是直接连接两个叶子节点,证明自己YY( 其实是我不会 )。 设f[i]表示节点i向上的线的长度。显然叶子节点的f为1。对于非叶子节点考虑如何合并: f相加<=len的两个儿子可以合并,但并不是随便合并就是最优的。可以将儿子存到一个队列里,按f值从小到大排序,用两个指针实现合并。如果f[head]+f[tail]<=len直接合并head++,tail--,ans++。如果大于len直接把tail独立成一条线吗?这样并不是最优的,可以把tail的值记录加到f[x]到上一层合并。但是只能有一个点和x接上,显然选f最小的,其他的点就只能 独立成一条线 了。注意最后如果head==tail要特判是和x接上还是 独立成一条线 。 这样直接合并到根就求出了最长线长度为len时的最少线数。 复杂度我不会算,有点玄但是跑的还挺快。 1 //19.00~20.00 :93 2 /

HDOJ - 4414 (Finding crosses)

筅森魡賤 提交于 2019-11-26 17:39:54
思路 : 直接枚举 1 /* 2 PROG: Finding crosses 3 ID : 4 LANG: C++ 5 */ 6 // #pragma warnning (diaable : 4530) 7 // #pragma warnning (disable : 4786) 8 9 #include < set > 10 #include <map> 11 #include <list> 12 #include <stack> 13 #include <queue> 14 #include <cmath> 15 #include < string > 16 #include <vector> 17 #include <utility> 18 #include <cmath> 19 #include <cstdio> 20 #include <cstdlib> 21 #include <cstring> 22 #include <iostream> 23 #include <fstream> 24 #include <algorithm> 25 26 using namespace std; 27 28 #define DEBUG 0 29 30 const int MAXN = 52 ; 31 const int dx[] = {- 1 , 0 , 1 , 0 }; 32

HDOJ - 4414 (Finding crosses)

三世轮回 提交于 2019-11-26 17:39:25
思路 : 直接枚举 1 /* 2 PROG: Finding crosses 3 ID : 4 LANG: C++ 5 */ 6 // #pragma warnning (diaable : 4530) 7 // #pragma warnning (disable : 4786) 8 9 #include < set > 10 #include <map> 11 #include <list> 12 #include <stack> 13 #include <queue> 14 #include <cmath> 15 #include < string > 16 #include <vector> 17 #include <utility> 18 #include <cmath> 19 #include <cstdio> 20 #include <cstdlib> 21 #include <cstring> 22 #include <iostream> 23 #include <fstream> 24 #include <algorithm> 25 26 using namespace std; 27 28 #define DEBUG 0 29 30 const int MAXN = 52 ; 31 const int dx[] = {- 1 , 0 , 1 , 0 }; 32