随笔分类 -  数据结构

摘要:A: 这是一道逗鹅题 队友一上来猜结论 猜对了 但是wa了 然后就扔了这题了 最后我暴力发现队友的结论没错 然后鹅发现没累乘 D: 找团好像没什么快的方法只能是暴力这个题虽然团有很多很多个但是我们只找前k小的就行现在的问题在于我们不能按照从小到大依次访问到每个团第一个方法是用优先队列我们一开始把单个 阅读全文
posted @ 2019-07-21 12:32 一入OI深似海 阅读(267) 评论(0) 推荐(0)
摘要:/* 主席树入门 从一个题目切入吧 HDU6230 Palindrome 最后转化成求区间[l,r]里面有几个数比x小 一开始就想无脑主席树 之前只会了一个板子 很不灵活 只会查第k小 然后二分i是第几小,套上主席树 这时候会多一个二分logn 然后跑的比较慢在超时的边缘试探 然后看到了划分树这个东西 还蛮好理解就写了一发 依旧在超时的边缘 其实查有几个比x小的数不需要套那一层二分 只要... 阅读全文
posted @ 2018-08-27 19:09 一入OI深似海 阅读(200) 评论(0) 推荐(0)
摘要:/* 一开始维护了两个标记 开了两个数组 想的是 可能当前两种操作都要做 但是太复杂了 不好处理 其实 当前要做的标记可以只有一个 我们在Insert的时候 要打的标记是2即翻转区间: 1.如果原来是区间赋值1 先赋值1在翻转 问题不大 标记变 1-1=0 2.如果原来是区间赋值0 同上 问题不大 标记 1-0=1 3.如果原始是区间翻转 抵消1-2=-1 4.如果原来是-1 无标记... 阅读全文
posted @ 2018-08-09 11:22 一入OI深似海 阅读(166) 评论(0) 推荐(0)
摘要:题目链接 https://vjudge.net/contest/240074#overview 只写一下自己做的几个题吧 阅读全文
posted @ 2018-07-26 19:36 一入OI深似海 阅读(177) 评论(0) 推荐(0)
摘要:/* 一开始想到的是 对于每个区间操作 先按左端点排序(包含的区间 留这打的区间) 我们维护pos表示 a数组找到了哪 对于当前这个区间 只需要找 pos--r这个区间 用set维护能用的数 没放到a中一个 就在set里面删除 对于下次处理的区间 上次的l到这次的l里的数 再扔到set里面 然后 本地跑4+s 怎么搞都过不了...... 其实可以不用对区间操作, 这样子常数比较大 直接维护每... 阅读全文
posted @ 2018-07-23 21:41 一入OI深似海 阅读(230) 评论(0) 推荐(0)
摘要:NOIP2016 模拟赛——那些年,我们学过的文化课背单词(word.c/cpp/pas)【题目描述】fqk 退役后开始补习文化课啦, 于是他打开了英语必修一开始背单词。 看着满篇的单词非常头疼, 而每次按照相同的顺序背效果并不好,于是 fqk 想了一种背单词的好方法!他把单词抄写到一个 n 行 m 阅读全文
posted @ 2016-11-09 17:41 一入OI深似海 阅读(284) 评论(0) 推荐(0)
摘要:/*洛谷 U4792 Acheing 二维线段树 n*n*logn*logn T成傻逼2333 */ #include #include #include #define maxn 1010 #define lc k*2 #define rc k*2+1 #define mid (l+r)/2 using namespace std; int n,m,k,g[maxn][maxn],x,y,z;... 阅读全文
posted @ 2016-11-08 17:54 一入OI深似海 阅读(279) 评论(0) 推荐(0)
摘要:/* poj 1821 n*n*m 暴力*/ #include #include #include #include #define maxn 110 #define maxm 16010 using namespace std; int n,m,f[maxn][maxm],ans; struct node{ int l,s,p; bool operator y?x:y; } i... 阅读全文
posted @ 2016-10-17 16:06 一入OI深似海 阅读(230) 评论(0) 推荐(0)
摘要:/*后来该数据了那个题 原来的被卡常数了 重写了一份*/ #include #include #include #define maxn 7010 #define mem(a,b)for(int i=0;i'9'){if(s=='-')f=-1;s=getchar();} while(s>='0'&&sm)return; mes(g,0); for(int i=0;ic)... 阅读全文
posted @ 2016-10-16 11:37 一入OI深似海 阅读(518) 评论(0) 推荐(0)
摘要:/* 好题啊 好题啊 而然还是看了一眼题解啊 有那么一点思路 但是离写出代码还很远 考虑必须分开放倒两个栈里的情况 即存在i #include #include #define maxn 1010 using namespace std; int n,m,a[maxn],num,head[maxn],color[maxn],mx[maxn][25],P[maxn],falg; int s1[ma... 阅读全文
posted @ 2016-10-10 21:55 一入OI深似海 阅读(163) 评论(0) 推荐(0)
摘要:/* 感觉noip不会靠这些东西..但是碰见了不看看就觉得很别扭,本来想大体知道就行了,背个板,然后 我一下午+一晚上就没干别的QAQ 先说说线段树吧 处理二维问题的有两种方法 树套树和四叉树 后者好理解常数小但是不资次打标记(反正我不会~~~) 后者XXXX常熟大但是资次打标记(我也不会~~~) 只看看前面那个 树套树嘛 就是在一维的基础上 每个节点都连出一棵树来 空间复杂度n*n 因为他不支... 阅读全文
posted @ 2016-09-26 21:25 一入OI深似海 阅读(535) 评论(0) 推荐(0)
摘要:/* 暴力应该很好理解 不多说了 至于线段树维护的嘛 还没看懂 哪天突然想明白了在写吧 */ #include #include #include #include #define maxn 5010 #define bas 10000 using namespace std; int n,m,f[maxn*4],ans; struct node{ int l,r,h,t; }A[ma... 阅读全文
posted @ 2016-09-21 15:13 一入OI深似海 阅读(178) 评论(0) 推荐(0)
摘要:/* 之前一直偷懒离散化+暴力做着题 今天搞一下扫描线 自己按照线段树的一般写法写的有些问题 因为不用于以前的区间sum so 题解搬运者23333 Orz~ 去掉了打标记的过程 同时更新区间的时候先判断是不是已经需要赋值 还有一些细节的处理 线段树是离散化之后的x轴建的 每个线段的权值转移到点上 每个点代表他右侧一小段的长度 所以修改[l,r]变为[l,r-1] 另外维护lazy 表示这个... 阅读全文
posted @ 2016-09-21 09:51 一入OI深似海 阅读(231) 评论(0) 推荐(0)
摘要:/* n*n暴力 这个很好想 */ #include #define maxn 100010 #define mod 9901 using namespace std; int n,k,a[maxn],f[maxn],ans; int Abs(int a){ return ak)continue; f[i]=(f[i]+f[j]+1)%mod; ... 阅读全文
posted @ 2016-09-20 09:07 一入OI深似海 阅读(309) 评论(0) 推荐(0)
摘要:/* 线段树区间合并 维护几个信息 到时候乱搞一下就好了 开始T了 有一种情况可以不用递归 直接算出来 */ #include #include #include #define maxn 100010 #define lc (k>1) using namespace std; int n,m,a[maxn],ls[maxn*4],rs[maxn*4],ln[maxn*4],rn[maxn*4... 阅读全文
posted @ 2016-09-11 19:07 一入OI深似海 阅读(147) 评论(0) 推荐(0)
摘要:/* 自己yy的奇葩做法居然A了23333 不过空间好像很大 时间好像略慢..... 毕竟不是正解 前缀维护sum值 枚举区间起点 然后终点的坐标可以确定在一个范围 可持久化线段树查询区间第1大 然后放到堆里 注意每个从堆里取出来再把这个区间第2大的放进去 这里k可能减成负的 注意特判 开始wa了 还有开longlong */ #include #include #include #incl... 阅读全文
posted @ 2016-09-10 07:56 一入OI深似海 阅读(290) 评论(0) 推荐(0)
摘要:/* 先来说一下第一眼看到想出的奇葩方法23333.. 找每个数左右有几个比他小的 前几天刚学了区间第k小的求法 然后... 枚举中间的那个点 对于左区间 二分找到他是第几大 右区间同理 然后 *起来 */ #include #include #include #include #define maxn 50010 #define maxm 50010*18*5 #define ll lon... 阅读全文
posted @ 2016-09-07 22:24 一入OI深似海 阅读(277) 评论(0) 推荐(0)
摘要:/* 想了半天没想出状态 自己还是太弱了 QAQ 题目问的是最多供给多少户 一般想法是把这个值定义为状态量 没想出来QAQ....看了看题解的状态 很机智.... f[i][j]表示i的子树 选了j个叶子的最大收益 这样 不亏本就是收益>=0 转移的话 先搜一下这个子树有几个叶子 然后枚举儿子 枚举当前儿子分几个叶子 这里的枚举顺序有套路 从大到小枚举i分几个 从小到大枚举j分几个 这样可... 阅读全文
posted @ 2016-09-01 21:37 一入OI深似海 阅读(576) 评论(0) 推荐(0)
摘要:/* 如果是查询[2,4] 就是a2+a3+a4 a2+a3 a2 显然裸地线段树算不出来 我们维护前缀和 那查询的时候还要减去前多计算的 */ #include #include #include #define maxn 100010 #define ll long long using namespace std; ll n,m,tot,a[maxn],s[maxn],x,y,z; st... 阅读全文
posted @ 2016-08-29 19:28 一入OI深似海 阅读(177) 评论(0) 推荐(0)
摘要:/*set加速维护*/ #include #include #include #include #define maxn 100010 using namespace std; sets; set::iterator p; int n,m,a[maxn],top; char c[10]; int init() { int x=0,f=1;char s=getchar(); whi... 阅读全文
posted @ 2016-08-22 21:05 一入OI深似海 阅读(308) 评论(0) 推荐(0)