Vessels
Codeforces Round #218 (Div. 2) D:http://codeforces.com/problemset/problem/371/D
题意:就是有一些盘子,盘子里可以装水,这些盘子是从上到下一次排开的,然后会有一些操作1,p ,x,表示在第p个盘子里加入水x,如果这个盘子装不下,水就会流向下一个盘子。2 p,表示查询第p个盘子里有多少水。
题解:这一题用到并查集是真的没有想到,也很难想到。水向下流的过程,就相当于儿子找父亲的过程,然后用并查集直接模拟出来,就可以了。具体可以看看代码。一开始,往线段树和树状数组上想,总是想不到解决办法。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=2e5+;
int f[N],val[N],a[N];
int n,m,t1,t2,t3;
void init(){
memset(val,,sizeof(val));
memset(a,,sizeof(a));
for(int i=;i<=n;i++)
f[i]=i;
}
int Find(int x){
int s;
for(s=x;s!=f[s];s=f[s]);
while(s!=x){
int temp=f[x];
f[x]=s;
x=temp;
}
return s;
}
int main(){
while(~scanf("%d",&n)){
init();
for(int i=;i<=n;i++){
scanf("%d",&val[i]);
a[i]=val[i];
}
scanf("%d",&m);
for(int i=;i<=m;i++){
scanf("%d%d",&t1,&t2);
if(t1==){
scanf("%d",&t3);
int r=Find(t2);
while(t3>){
if(val[r]>=t3){
val[r]-=t3;
break;
}
else{
t3-=val[r];
val[r]=;
int temp=r++;
if(r>n)break;
else r=Find(r);
f[temp]=r;
}
}
}
else
printf("%d\n",a[t2]-val[t2]);
}
}
}
Vessels的更多相关文章
- Codeforces Round #218 (Div. 2) D. Vessels
D. Vessels time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...
- CodeForces 371D. Vessels
暴力+胡乱优化就过了..tags给的东西似乎什么都没用到.....CF的数据是不是有点水啊.....果然是没有营养的题目..... D. Vessels time limit per test 2 s ...
- Codeforces 371D Vessels (模拟)
题目链接 Vessels 这道题我做得有点稀里糊涂啊==TLE了几发之后改了一行就A了. 具体思路就是记fi为若第i个容器已经盛不下水了,那么接下来盛水的那个容器. hi为若现在要给i号容器加水,当前 ...
- Codeforces I. Vessels(跳转标记)
题目描述: Vessels time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- CodeForces 371D Vessels(树状数组)
树状数组,一个想法是当往p注水时,认为是其容量变小了,更新时二分枚举,注意一些优化. #include<cstdio> #include<iostream> #include& ...
- cf D. Vessels
http://codeforces.com/contest/371/problem/D 第一遍写的超时了,然后看了别人的代码,思路都是找一个点的根,在往里面加水的时候碗中的水满的时候建立联系.查询的时 ...
- words
conscious[英][ˈkɒnʃəs][美][ˈkɑnʃəs]consensus[英][kənˈsensəs][美][kənˈsɛnsəs] scious sensuswaterflood; de ...
- Mango DS Traning #49 ---线段树3 解题手记
Training address: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=38994#overview B.Xenia and B ...
- SPOJ Pouring Water
传送门 POUR1 - Pouring water #gcd #recursion Given two vessels, one of which can accommodate a litres o ...
随机推荐
- 设置imageView正方形高宽
private void initWidth() { int screenWidth = ((MyApplication)getApplication()).screenWidth; if(0 == ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(19)-权限管理系统-用户登录
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(19)-权限管理系统-用户登录 我们之前做了验证码,登录界面,却没有登录实际的代码,我们这次先把用户登录先 ...
- [转] JavaScript 原型理解与创建对象应用
这段时间把之前的 JavaScript 的笔记复习了一遍,又学习了一些新的内容,所以把自己的学习笔记加上个人理解在这里总结一下,并提供一个简单的应用示例,希望能帮助一些刚入门的朋友.主 要参考< ...
- html+css3实现网页时钟
在网页上实现时钟功能,效果如右图所示: 运用到的关键技术有:css3中的旋转.旋转基点设置 旋转:transform:rotate(*deg) 旋转基点:transform-origin: x轴偏移 ...
- oracle左右连接 完全连接 有效连接 心得总结
左链接 A表 Left join B表 on 条件 示例 A表 B表 SELECT * FROM A left JOIN B ON A.AID = B.BID; 结果: 左链接查询出来的数 ...
- git 指令汇总
学习git过程中整理的笔记: git add 添加文件到暂存区: git commit -m "更改说明" 提交文件更改: git status 查看当前文件状态: git dif ...
- 前台之boostrap
这个网址有些东西不错
- 部分A+B_1
正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA.例如:给定A = 3862767,DA = 6,则A的“6部分”PA是66,因为A中有2个6. 现给定A.DA.B.DB,请编 ...
- iOS支付 IPAPayment demo iTunes Conection里面添加测试帐号,添加商品,实现购买过程
https://github.com/ccguo/IAPPaymentDemo 发一个demo
- 阿里druid 介绍及配置
1. 简介,什么是Druid Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池.插件框架和SQL解析器组成.该项目主要是为了扩展JDBC的一些限制,可以让程序员实现一些特殊的需求,比如 ...