lj的锁

Lj花很大力气设计了一个锁,有一天,lj用这个锁把lbn锁在了一个小房间里,准备把lbn啊掉,现在lbn要逃出这个房间,他需要解开这个锁。在平面上有n个钉子,第i个钉子的位置是(x[i],0),你需要回答m个问题,每个问题都是如下格式的:如果在第a[i]个钉子上挂一条长为l[i],末端有一个重锤的轻绳,并让它沿逆时针方向做圆周运动,显然由于大量钉子的存在,绳子会绕在一些钉子上并最终围绕其中一个钉子做圆周运动,求最后绳子做圆周运动的圆心是哪颗钉子。然而lj还有2s就要抓到lbn了,lbn为了逃命不得不求助于你,让你帮他解决那些数不清的询问。第一行两个整数n,m(1<=n,m<=2*10^5),代表钉子的个数和询问的个数。第二行n个整数x[1],x[2],…,xn,代表钉子的横坐标,保证坐标各不相同。接下来m行,每行两个整数a[i],li,代表一个询问中绳子最初挂在的钉子编号以及绳子的长度

这道题二分即可。。二分真是奥妙重重。

#include <cctype>
#include <cstdio>
#include <algorithm>
using namespace std; typedef long long LL;
const LL maxn=2e5+5;
LL n, m;
struct node{
LL data, id;
}ar[maxn];
LL wentto[maxn], where[maxn], x[maxn], maxl, minr;
bool operator <(const node a, const node b){
return a.data<b.data;
} inline LL getLL() {
register char ch;
register bool neg=false;
while(!isdigit(ch=getchar())) if(ch=='-') neg=true;
register LL x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return neg?-x:x;
} int main(){
scanf("%lld%lld", &n, &m);
for (LL i=0; i<n; ++i){
ar[i].data=getLL();
ar[i].id=i;
}
sort(ar, ar+n);
for (LL i=0; i<n; ++i){
wentto[ar[i].id]=i;
where[i]=ar[i].id;
x[i]=ar[i].data;
}
LL a, lpos, rpos, dis;
LL l;
for (LL i=0; i<m; ++i){
a=getLL(), l=getLL();
a=wentto[a-1];
//lrpos存下标.lpos查大于等于它的,rpos小于等于它的
maxl=0, minr=n;
rpos=lower_bound(x, x+n, l+x[a])-x;
if (rpos+1<minr) minr=rpos+1;
if (x[rpos]!=l+x[a]) --rpos;
lpos=lower_bound(x, x+n, x[a]-l)-x;
while (lpos<rpos){
l-=x[rpos]-x[a];
a=rpos;
lpos=lower_bound(x+maxl, x+minr, x[a]-l)-x;
if (lpos>maxl) maxl=lpos;
l-=x[a]-x[lpos];
a=lpos;
rpos=lower_bound(x+maxl, x+minr, l+x[a])-x;
if (x[rpos]!=l+x[a]) --rpos;
dis=x[rpos]-x[lpos];
if (dis) l=l%(dis*2);
rpos=lower_bound(x+maxl, x+minr, l+x[a])-x;
if (x[rpos]!=l+x[a]) --rpos;
if (rpos+1<minr) minr=rpos+1;
}
printf("%lld\n", where[a]+1);
}
return 0;
}

lj的锁的更多相关文章

  1. 使用redis构建可靠分布式锁

    关于分布式锁的概念,具体实现方式,直接参阅下面两个帖子,这里就不多介绍了. 分布式锁的多种实现方式 分布式锁总结 对于分布式锁的几种实现方式的优劣,这里再列举下 1. 数据库实现方式 优点:易理解 缺 ...

  2. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

  3. java中的锁

    java中有哪些锁 这个问题在我看了一遍<java并发编程>后尽然无法回答,说明自己对于锁的概念了解的不够.于是再次翻看了一下书里的内容,突然有点打开脑门的感觉.看来确实是要学习的最好方式 ...

  4. 分布式锁1 Java常用技术方案

    前言:       由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题.所以自己结合实际工作中的一些经验和网上看到的一些资 ...

  5. 如何在高并发环境下设计出无锁的数据库操作(Java版本)

    一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...

  6. 如何定位Oracle数据库被锁阻塞会话的根源

    首先再次明确下,数据库因为要同时保证数据的并发性和一致性,所以操作有锁等待是正常的. 只有那些长时间没有提交或回滚的事物,阻塞了其他业务正常操作,才是需要去定位处理的. 1.单实例环境 2.RAC环境 ...

  7. java 线程 Lock 锁使用Condition实现线程的等待(await)与通知(signal)

    一.Condition 类 在前面我们学习与synchronized锁配合的线程等待(Object.wait)与线程通知(Object.notify),那么对于JDK1.5 的 java.util.c ...

  8. Android 死锁和重入锁

    死锁的定义: 1.一般的死锁 一般的死锁是指多个线程的执行必须同时拥有多个资源,由于不同的线程需要的资源被不同的线程占用,最终导致僵持的状态,这就是一般死锁的定义. package com.cxt.t ...

  9. Xcode 锁终端

    锁终端 输入: <1>cd /Applications/Xcode.app 回车 结果显示: Xcode.app 输入: <2>sudo chown -hR root:whee ...

  10. mysql 行级锁的使用以及死锁的预防

    一.前言 mysql的InnoDB,支持事务和行级锁,可以使用行锁来处理用户提现等业务.使用mysql锁的时候有时候会出现死锁,要做好死锁的预防. 二.MySQL行级锁 行级锁又分共享锁和排他锁. 共 ...

随机推荐

  1. C#--父子页面传值、刷新(showModalDialog)

    父页面: var obj = new Object(); obj.name="name"; var rtnValue=window.showModalDialog("ch ...

  2. 分享知识-快乐自己:Mybatis 基础动态语句

    目录: User: package mlq.bean; /** * 用户实体类 */ public class User { private Integer uId; private String u ...

  3. 关于C++多态的理解

    多态,即多种形态.对于具有继承关系的一类对象,子类表现出了父类的某些特性,但是表现的不一样,这就是多态的现实体现.例如动物可以发声,但是狗是旺旺,狗是动物的一种,但是表现了不同的叫的特点,这就是多态. ...

  4. leetcode 5 Longest Palindromic Substring(Manacher算法求最长回文串)

    应用一下manacher算法就可以O(n)求出结果了.可以参考hdu3068 substr(start,length)函数是这样用的: substr 方法 返回一个从指定位置开始,并具有指定长度的子字 ...

  5. Anthem.NET 的回调流程图

    下面用一个最简单的 anthem:Button 回调作为例子,理清回调过程中执行函数的次序.代码如下: <%@ Page Language="C#" AutoEventWir ...

  6. http头部解释

    If-Modified-Since,If-Node-Match,ETag,Last-Modified 1 属于 Request Headers的是:If-Modified-Since,If-Node- ...

  7. Poj 1887 Testing the CATCHER(LIS)

    一.Description A military contractor for the Department of Defense has just completed a series of pre ...

  8. POJ 1046 Color Me Less(浅水)

    一.Description A color reduction is a mapping from a set of discrete colors to a smaller one. The sol ...

  9. UVa11624(逃离火焰问题)

    #include"cstdio" #include"queue" #include"cstring" using namespace std ...

  10. selenium如何获取已定位元素的属性值?

    HTML源代码: <div class="res-status" data-fortune="5" data-selfsos="" d ...