20160723数据结构节alexandrali
大坑最后再填。
20160803:心情好回来填啦(5/7)
做的题目是:
poj2970
我们先每个人都不给钱qwq
然后我们发现有一位的工作时间超过了d
那么我们就从以前安排过工作的人里,a最大的,给他加上一定量的x,使得后面的这个超出di的工作者可以在di前完成任务,或者他的工作时间已经为0,则继续找剩下的当中a最大的
这个过程用堆维护,时间复杂度O(nlogn)
struct data{
int a,b,d;
bool operator <(const data&b)const {
return a<b.a;
}
};
bool cmp(const data&a,const data&b){
return a.d<b.d;
}
int n;data a[100005];
priority_queue<data>q;
int main(){
n=gi;
FOR1(i,n){
a[i].a=gi;a[i].b=gi;a[i].d=gi;
}
sort(a+1,a+n+1,cmp);
long long sum=0;
double ans=0;
FOR1(i,n){
sum+=a[i].b;
q.push(a[i]);
while(!q.empty()&&sum>a[i].d){
data c=q.top();q.pop();
if(sum-c.b>a[i].d){
ans=ans+(double)c.b/c.a;
sum=sum-c.b;
}
else{
ans=ans+(double)(sum-a[i].d)/c.a;
c.b=c.b-sum+a[i].d;
sum=a[i].d;
q.push(c);
}
}
}
printf("%.2f\n",ans);
return 0;
}
poj2796
首先由于元素非负,sum[l,r]的值随区间长度增长,单调不降
那么我们求出对于每个元素,以它为最小值的区间最左到哪里,最右到哪里即可
我们用单调栈实现,复杂度就是O(n)
int n,a[100005];
ll qzh[100005];
int pr[100005],nx[100005],ds[100005],top;
int main(){
RI(n);
FOR1(i,n){
a[i]=gi;
qzh[i]=qzh[i-1]+a[i];
}
FOR1(i,n){
while(top&&a[ds[top]]>=a[i])--top;
pr[i]=top?ds[top]:0;
ds[++top]=i;
}
top=0;
FORD(i,n,1){
while(top&&a[ds[top]]>=a[i])--top;
nx[i]=top?ds[top]:n+1;
ds[++top]=i;
}
ll ans=0;int l=1,r=1;
FOR1(i,n){
ll t=(qzh[nx[i]-1]-qzh[pr[i]])*(ll)(a[i]);
if(t>ans){
r=nx[i]-1;l=pr[i]+1;
ans=t;
}
}
cout<<ans<<endl;cout<<l<<' '<<r;
return 0;
}
ural 1003
考虑前缀和的奇偶性
区间和是奇数的,说明头尾的前缀和奇偶性不同区间和是偶数的,说明头尾的前缀和奇偶性相同
直接使用并查集维护这个关系,回答询问
int l,n,block;
int a[5001],b[5001],f[100006];
char s[5001][6];
int find(int x){
return f[x]==x?x:f[x]=find(f[x]);
}
void uni(int a,int b){
int p,q;
p=find(a);
q=find(b);
if(q!=p)
f[q]=p;
}
int main(){
block=50003;
while (scanf("%d",&l),l!=-1){
scanf("%d",&n);
FOR1(i,n)
a[i]=gi,b[i]=gi,scanf("%s",s[i]);
FOR1(i,block*2)f[i]=i;
f[0]=1;
int i=1;
for(;i<=n;i++){
int x=(a[i]-1)%block,y=b[i]%block;
if(s[i][0]=='e'){
if(find(x)==find(y+block))break;
uni(x,y);
uni(x+block,y+block);
}else{
if(find(x+block)==find(y+block))break;
uni(x,y+block);
uni(x+block,y);
}
}
printf("%d\n",i-1);
}
}
sgu 180
逆序对裸题,有很多做法,过于简单不贴代码了
ural 1028
【题意】给定多个二维坐标,求每个点左下角的点数
树状数组
poj版需要特判重点
int c[32005];
int lowbit(int x){
return x &(-x);
}
int sum(int i){
int s=0;
while(i>0){
s=s+c[i];
i=i-lowbit(i);
}
return s;
}
void update(int i,int value){
while(i<=32005){
c[i]=c[i]+value;
i=i+lowbit(i);
}
}
int level[32005];
int main(){
int Case;
scanf("%d",&Case);
int x,y;
for(int i=0;i<Case;i++){
scanf("%d%d",&x,&y);
int tmp=sum(++x);
level[tmp]++;
update(x,1);
}
for(int i=0;i<Case;i++)
printf("%d\n",level[i]);
return 0;
}
poj2944 、sgu 336
不会做
强烈推荐在vjudge做
20160723数据结构节alexandrali的更多相关文章
- [转]RegExp 构造函数创建了一个正则表达式对象,用于将文本与一个模式匹配
本文转自:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp RegExp ...
- 第五节 Go数据结构之队列
一.什么是队列 数据结构里的队列就是模仿现实中的排队.如上图中狗狗排队上厕所,新来的狗狗排到队伍最后,最前面的狗狗撒完尿走开,后面的跟上.可以看出队列有两个特点: (1) 新来的都排在队尾: (2) ...
- ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借
ASP.NET MVC深入浅出系列(持续更新) 一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...
- 第六节 Go数据结构之集合
一.什么是集合 集合就是不同对象的无序聚集.那么链表和集合有什么关系呢?我们来变个魔术.如下图是各种颜色组成的链表: 下面我们一步步把链表变成集合. 第一步砍去链接 第二步去掉重复 第三步放到一个框里 ...
- 第四节 Go数据结构之栈
一.什么是栈 这是杭州地铁1号线线路图.大卫哥考考大家,地铁列车如何调头? 我也不卖关子了,列车通常是用"人字轨道"来变换车道. 列车先从A轨道开进"人字轨道" ...
- [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法
二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...
- 基本数据结构(2)——算法导论(12)
1. 引言 这一篇博文主要介绍链表(linked list),指针和对象的实现,以及有根树的表示. 2. 链表(linked list) (1) 链表介绍 我们在上一篇中提过,栈与队 ...
- 学习javascript数据结构(三)——集合
前言 总括: 本文讲解了数据结构中的[集合]概念,并使用javascript实现了集合. 原文博客地址:学习javascript数据结构(三)--集合 知乎专栏&&简书专题:前端进击者 ...
- 学习javascript数据结构(二)——链表
前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...
随机推荐
- 【leetcode】13. Roman to Integer
题目描述: Given a roman numeral, convert it to an integer. 解题分析: 这道题只要百度一下转换的规则,然后着这解释写代码即可.实现上并没有什么难度,直 ...
- GDAL读取tiff文件/C++源码
// gdal_geotiff.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "gdal_priv.h&quo ...
- uml的关联多重度
UML中关联的多重度是指一个类的实例能够与另一个类的多少个实例相关联,这个“多少”被称为关联角色的多重度指定关联一端的多重度.也可以这样理解:在关联另一端的类的每个对象要求在本端的类必须有多 少个对象 ...
- Codevs 1474 十进制转m进制
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 将十进制数n转换成m进制数 m<=16 n<=100 输 ...
- HDU 1165 Eddy's research II
题意:已知,求A(m, n). 分析:根据样例模拟一下过程就可以找出递推关系. #include<cstdio> #include<cstring> #include<c ...
- bzoj2395[Balkan 2011]Timeismoney最小乘积生成树
所谓最小乘积生成树,即对于一个无向连通图的每一条边均有两个权值xi,yi,在图中找一颗生成树,使得Σxi*Σyi取最小值. 直接处理问题较为棘手,但每条边的权值可以描述为一个二元组(xi,yi),这也 ...
- bzoj 1009:[HNOI2008]GT考试
这道题机房n多人好久之前就A了…… 我到现在才做出来…… 一看就是DP+矩阵乘法,但是一开始递推式推错了…… 正确的递推式应该是二维的…… f[i][j] 表示第准考证到第 i 位匹配了 j 位的方案 ...
- 不用Unity库,利用.NET动态代理自己实现AOP
AOP意为面向切面的程序设计,主要表现为对不同的代码逻辑进行隔离,从而降低不同业务逻辑之间的耦合性,AOP又理解为“横切”,可以在不改变原有实现的情况下,对代码进行拦截和扩展,如果原有设计像一个瓶子, ...
- iOS人机界面指南(翻译)
本文源自于苹果开发者网站的文章iOS Human Interface Guidelines,内容比较多,此处仅仅是部分笔记.
- EasyUI_Datagrid学习总结
EasyUI_Datagrid学习总结 2016年7月25日星期一 一.简介 Easyui中的datagrid从总的作用上讲,就是在列表上显示数据,类似于table,但是在table的基础上,此控件更 ...