数据结构
文章平均质量分 75
zyq_20030305
der
展开
-
poj3250翻译+题解(单调栈)
#include<stdio.h>int a[80005],f[80005];int main(){ int n,i,j,top=1; long long ans=0; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); f[1]=a[1]; for(i=2;i<=n;i++) { if(f[top]>a[i]) f[++top]=a[i],ans+=top-1; else { while(f[top]<=原创 2017-08-13 22:21:37 · 315 阅读 · 0 评论 -
USACO 2009 Mar Silver 3.Look Up
DescriptionFarmer John's N (1 1..N, are once again standing in a row. Cow i has height H_i (1 H_i Each cow is looking to her left toward those with higher indexnumbers. We say that cow i原创 2017-11-17 23:10:01 · 202 阅读 · 0 评论 -
VIJOS-P1512 SuperBrother打鼹鼠
Description 在这个“打鼹鼠”的游戏中,鼹鼠会不时地从洞中钻出来,不过不会从洞口钻进去(鼹鼠真胆大……)。洞口都在一个大小为n(nInput每个输入文件有多行。 第一行,一个数n,表示鼹鼠的范围。 以后每一行开头都有一个数m,表示不同的操作: m=1,那么后面跟着3个数x,y,k(0Output对于每个m=2,输出一行数,这行数只有一原创 2017-10-20 23:38:09 · 223 阅读 · 0 评论 -
VIJOS-P1066 弱弱的战壕题解
Description永恒和mx正在玩一个即时战略游戏,名字嘛~~~~~~恕本人记性不好,忘了-_-b。 mx在他的基地附近建立了n个战壕,每个战壕都是一个独立的作战单位,射程可以达到无限(“mx不赢定了?!?”永恒ftING...@_@)。 但是,战壕有一个弱点,就是只能攻击它的左下方,说白了就是横纵坐标x、y有一个小于它的点(mx:“我的战壕为什么这么菜”ToT)。这样,永恒就可以从别原创 2017-10-20 23:35:12 · 338 阅读 · 0 评论 -
poj1330,JDOJ3055O(nlogn)做法
#include<stdio.h>int f[100001][18];//倍增,f[i][j]表示以i为起点跳2^j步的父亲.int level[100001];//表示i点的层数是多少int ans[100001][50];//ans[i][j]表示第i点有第j个儿子.int idx[100001],tmp;int dfs(int i){ level[i]=level[f[i][0]]+1;//倍增更新层数 for(int j=1;j<17;j++) f[i][j]=f[f[i][j-原创 2017-08-14 10:34:09 · 266 阅读 · 0 评论 -
poj2395 Kruskal题解(Prim好像过不了)
#include<stdio.h>#include<math.h>#include<algorithm>using namespace std;struct Way{ int a,b,val;};Way w[100001];int f[2001],s[2001],home[2001];int idx;int n,m,t,how,a,b,c;bool com(const Way &a,const Way &b){ return a.val<b.val;}int find(int原创 2017-08-15 14:42:19 · 233 阅读 · 0 评论 -
树状数组
树状数组在我刚学时没有熟练掌握,半年后重温树状数组,感觉好了很多。它是这样的:假设数组a[1..n],那么查询a[1]+...+a[n]的时间是log级别的,而且是一个在线的数据结构,支持随时修改某个元素的值,复杂度也为log级别。来观察这个图:令这棵树的结点编号为C1,C2...Cn。令每个结点的值为这棵树的值的总和,那么容易发现:C1 = A1C2 = A1原创 2017-10-19 22:58:19 · 150 阅读 · 0 评论 -
vijos1320 清点人数 题解
Description初始时,火车上没有学生;当同学们开始上火车时,年级主任从第一节车厢出发走到最后一节车厢,每节车厢随时都有可能有同学上下。年级主任走到第m节车厢时,他想知道第1到m这m节车厢上一共有多少学生,但是他没有调头往回走的习惯.也就是说每次当他提问时,m总会比前一次大。Input第一行两个整数n,k,表示火车共有n节车厢以及k个事件。接下来有k行,按时间先后给出原创 2017-10-19 23:09:01 · 523 阅读 · 0 评论 -
poj2486 Apple Tree 题解
#include<stdio.h>#include<string.h>int a[201],b[201];struct Edge{ int to,next,len;};Edge edge[401];int head[201],idx,n,m;int f[2][201][201];int max(int a,int b){ if(a>b) return a; return b;}void dfs(int from,int p){ for(int i=head[p];i;i原创 2017-08-15 23:11:07 · 272 阅读 · 0 评论 -
USACO 2015 Dec Platinum 1.Max Flow题解,
#include<stdio.h>int f[500001][21];int level[500001];int to[1000001];//边开2倍int next[1000001];int head[500001];int fa[500001];int sum,tmp;void addedge(int a,int b)//链表存边{ next[++sum]=head[a]; head[a]=sum; to[sum]=b;}void dfs(int x){ for(int原创 2017-08-15 09:37:28 · 309 阅读 · 0 评论 -
[JLOI2014]松鼠的新家
#include<stdio.h>int a[300001];int f[300001][21];int level[300001];int ans[300001][50];int queue[300001];int to[600001];int next[600001];//边开2倍,双向边int head[300001];int fa[300001];int sum,tmp;void addedge(int a,int b)//链表加边{ next[++sum]=head原创 2017-08-14 17:49:04 · 204 阅读 · 0 评论 -
HNOI2005狡猾的商人
题目描述刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的。账本上记录了n个月以来的收入情况,其中第i个月的收入额为ai,i=1,2,3……n-1,n。当ai大于0时表示这个月盈利ai元,当ai小于0时表示这个月亏损ai元。所谓一段时间内的总收入,就是这段时间内每个月的收入额的总和。刁姹的任务是秘密进行的,为了调查商人的账本,她只好跑到商人那里打工。她趁商人不在时去偷原创 2018-01-26 16:19:48 · 245 阅读 · 0 评论