【CodeForces - 697C】Lorenzo Von Matterhorn(二叉树,思维)

题干:

巴尼住在NYC。NYC具有从1开始的正整数编号的无数个交叉点。在交叉点 i 和 2i 之间以及 i和 2i + 1 之间存在双向道路,对任意整数 i 都满足。在任意两点之间都有且只有一条最短路。

 

最初任何人都可以通过任何道路免费。 但是后来发生了 q 个事件。 有两种类型的事件:

1. 政府制定新规。 一个规则可以用三个整数表示 vu 和 w。经过这次操作,点 u 到点 v 路径上的所有点增加 w 元路费。

2. 巴尼从点 v 通过最短路移动到点 u

现巴尼想知道,他的每一次移动需要花多少钱

Input

第一行包含一个整数 q (1 ≤ q ≤ 1 000).

之后 q 行,每行包含一个事件。加路费的事件都被描述成 1 v u w ,代表将点 u 到点 v 路径上所有点路费增加 w 元。移动的事件都被描述成 2 v u,表示巴尼从点 v 走到点 u.

1 ≤ v, u ≤ 1018, v ≠ u, 1 ≤ w ≤ 109。

Output

对于第二类的每个事件,打印Barney在此事件中通过的所有道路的通行费的总和,一行。 以相应事件的时间顺序打印答案。

Example

Input

7
1 3 4 30
1 4 1 2
1 3 6 8
2 4 3
1 6 1 40
2 3 7
2 2 4

Output

94
0
32

Note

In the example testcase:

Here are the intersections used:

 

  1. Intersections on the path are 3, 1, 2 and 4.
  2. Intersections on the path are 4, 2 and 1.
  3. Intersections on the path are only 3 and 6.
  4. Intersections on the path are 4, 2, 1 and 3. Passing fee of roads on the path are 32, 32 and 30 in order. So answer equals to 32 + 32 + 30 = 94.
  5. Intersections on the path are 6, 3 and 1.
  6. Intersections on the path are 3 and 7. Passing fee of the road between them is 0.
  7. Intersections on the path are 2 and 4. Passing fee of the road between them is 32 (increased by 30 in the first event and by 2 in the second).

解题报告:

   注意到i,2i与 i,2i+1的搭配,考虑二叉树。因为最大的值是1e18,所以层数一定不会很多(最多也就60层吧?)所以对于更新和查询均可以暴力。用点权代表他和父节点的边权,一维map就可以解决。(二维map也可以,但是因为孩子节点的父节点是唯一的,所以孩子节点就可以当做这条边的特征元)

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define FF first
#define SS second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 2e5 + 5;
map<ll,ll> mp;
void add(ll u,ll v,ll w) {while(u!=v) {if(u>v) mp[u] += w,u /= 2;else mp[v] += w,v /= 2;}
}
ll sum(ll u,ll v) {ll res = 0;while(u!=v) {if(u>v) res += mp[u],u /= 2;else res += mp[v],v /= 2;}return res;
}
int main()
{int q,op;ll u,v,w;cin>>q;while(q--) {scanf("%d",&op);if(op == 1) {scanf("%lld%lld%lld",&u,&v,&w);add(u,v,w);}else {scanf("%lld%lld",&u,&v);printf("%lld\n",sum(u,v));}}return 0 ;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439654.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Coursera自动驾驶课程第8讲:Basics of 3D Computer Vision

在上一讲《Coursera自动驾驶课程第7讲&#xff1a;Vehicle Lateral Control》中我们了解了如何对汽车进行横向控制。 本课程第一个篇章就暂时告一段落了&#xff0c;接下来我们开始学习新的篇章。 课程第二个篇章是状态估计和定位模块。不过在这里我做了一下调整&#xff0c;我…

volatile和synchronized的区别与联系

这个可能是最好的对比volatile和synchronized作用的文章了。volatile是一个变量修饰符&#xff0c;而synchronized是一个方法或块的修饰符。所以我们使用这两种关键字来指定三种简单的存取变量的方式。 int i1; int geti1() { return i1; } volati…

【CodeForces - 628C】Bear and String Distance(贪心,构造)

Description 定义两个小写字母之间的距离为这两个字母在字母表中的距离&#xff0c;如dis(a,z)25,dis(a,c)2&#xff0c;两个长度相同串的距离为这两个串对应位置字母距离之和。现给出一个长度为n的串s和一个距离k&#xff0c;问是否存在一个长度为n的串ss&#xff0c;使得dis…

Coursera自动驾驶课程第9讲:Visual Features Detection Description and Matching

在上一讲《Coursera自动驾驶课程第8讲&#xff1a;Basics of 3D Computer Vision》中我们学习了计算机视觉基本知识。 本讲我们将学习计算机视觉中的视觉特征模块。 B站视频链接&#xff1a;https://www.bilibili.com/video/BV1PE411D72p 文章目录1. Introduction to Image f…

【CodeForces - 514C】Watto and Mechanism(字符串哈希)

题干&#xff1a; 输入n个字符串&#xff0c;然后进行m次询问&#xff0c;每次询问输入一个字符串&#xff0c;问n个字符串中是否存在与当前输入的字符串长度相等&#xff0c;并且刚好有且仅有一个位置的字符不同。存在则输出YES&#xff0c;不存在输出NO。 Examples Input …

并发编程(原子性、可见性、一致性)

1、原子性&#xff08;Atomicity&#xff09; 原子性是指在一个操作中就是cpu不可以在中途暂停然后再调度&#xff0c;既不被中断操作&#xff0c;要不执行完成&#xff0c;要不就不执行。 如果一个操作时原子性的&#xff0c;那么多线程并发的情况下&#xff0c;就不会出现变…

Coursera自动驾驶课程第10讲:Feedforward Neural Networks

在上一讲《Coursera自动驾驶课程第9讲&#xff1a;Visual Features Detection Description and Matching》中我们学习了如何进行图像特征检测&#xff0c;特征匹配以及如何构建视觉里程计来估计相机的运动。 本讲我们将学习神经网络模块&#xff0c;关于神经网络或深度学习网上…

【CodeForces - 514D】R2D2 and Droid Army(二分+滑动窗口ST表,或 尺取+单调队列或STLmultiset)

题干&#xff1a; An army of n droids is lined up in one row. Each droid is described by m integers a1, a2, ..., am, where ai is the number of details of the i-th type in this droids mechanism. R2-D2 wants to destroy the sequence of consecutive droids o…

守护进程和守护线程

对于JAVA而言&#xff0c;一般一个应用程序只有一个进程——JVM。除非在代码里面另外派生或者开启了新进程。 而线程&#xff0c;当然是由进程开启的。当开启该线程的进程离开时&#xff0c;线程也就不复存在了。 所以&#xff0c;对于JAVA而言&#xff0c;线程是完全可以由自…

Coursera自动驾驶课程第11讲:2D Object Detection

在上一讲《Coursera自动驾驶课程第10讲&#xff1a;Feedforward Neural Networks》中我们学习了神经网络的基础知识&#xff0c;包括损失函数&#xff0c;梯度下降&#xff0c;正则化&#xff0c;卷积网络等。 本讲我们将学习深度学习的一个重要应用&#xff1a;图像目标检测。…

【CodeForces - 460C】Present(二分+树状数组)

题干&#xff1a; 给定N朵花的原先的高度&#xff0c;从左到右排列&#xff0c;最多浇水m天&#xff0c;每天只能浇一次&#xff0c;每次使得连续的w朵花的高度增长1&#xff0c;问最后最矮的花的高度最高是多少。 Examples Input 6 2 3 2 2 2 2 1 1Output 2Input 2 5 1 …

多线程知识梳理(1) - 并发编程的艺术笔记

第三章 Java内存模型 3.1 Java内存模型的基础 通信 在共享内存的模型里&#xff0c;通过写-读内存中的公共状态进行隐式通信&#xff1b;在消息传递的并发模型里&#xff0c;线程之间必须通过发送消息来进行显示的通信。同步 在共享内存并发模型里&#xff0c;同步是显示进行…

Coursera自动驾驶课程第12讲:Semantic Segmentation

在上一讲《Coursera自动驾驶课程第11讲&#xff1a;2D Object Detection》我们学习了深度学习的一个重要应用&#xff1a;目标检测。 本讲我们将学习深度学习的另一个重要应用&#xff1a;语义分割。这是图片像素级的一个重要应用。 B站视频链接&#xff1a;https://www.bili…

【CodeForces - 697D】Puzzles(树形dp,期望dp)

题目大意&#xff1a; 给定一棵树&#xff0c;从1开始&#xff0c;按DFS的方式访问这棵树 每次从父亲节点随机访问儿子&#xff0c;问每个节点被访问到的时间的期望 输入&#xff1a;第一行一个数n&#xff0c;代表n个节点。第二行n-1个数p2,p3,p4,p5...,pn-1&#xff0c;其…

多线程知识梳理(2) - 并发编程的艺术笔记

layout: post title: 《Java并发编程的艺术》笔记 categories: Java excerpt: The Art of Java Concurrency Programming. <img src"http://upload-images.jianshu.io/upload_images/658453-a94405da52987372.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240…

Coursera自动驾驶课程第13讲:Least Squares

在上一讲《Coursera自动驾驶课程第12讲&#xff1a;Semantic Segmentation》我们学习了深度学习的另一个重要应用&#xff1a;语义分割。至此&#xff0c;本课程的视觉感知模块就介绍完了。 从本讲开始&#xff0c;我们将学习一个新的模块&#xff0c;也是本课程的第三个模块&…

【POJ - 3211】Washing Clothes (dp,0-1背包中点问题)

题干&#xff1a; Dearboy was so busy recently that now he has piles of clothes to wash. Luckily, he has a beautiful and hard-working girlfriend to help him. The clothes are in varieties of colors but each piece of them can be seen as of only one color. In…

java多线程同步synchronized——对象监视器

1、synchronized关键字的作用域有二种&#xff1a; 1&#xff09;是某个对象实例内&#xff0c;synchronized aMethod(){}可以防止多个线程同时访问这个对象的synchronized方法&#xff08;如果一个对象有多个synchronized方法&#xff0c;只要一个线程访问了其中的一个synchro…

Coursera自动驾驶课程第14讲:Linear and Nonlinear Kalman Filters

在上一讲《Coursera自动驾驶课程第13讲&#xff1a;Least Squares》我们学习了最小二乘法相关知识。 本讲我们将学习20世纪最著名的一个算法&#xff1a;卡尔曼滤波。具体包括线性卡尔曼滤波&#xff08;KF&#xff09;&#xff0c;扩展卡尔曼滤波(EKF)&#xff0c;误差状态卡…

☆【UVA - 624 】CD(dp + 0-1背包 + 记录路径)

题干&#xff1a; You have a long drive by car ahead. You have a tape recorder, but unfortunately your best music is on CDs. You need to have it on tapes so the problem to solve is: you have a tape N minutes long. How to choose tracks from CD to get most o…