当前位置: 首页 > 编程日记 > 正文

HDU 4913 Least common multiple

/*
hdu4913 Least common multiple
http://acm.hdu.edu.cn/showproblem.php?pid=4913
离散化 线段树 统计逆序数思想
tips:
1、线段树中一定要到处都取模,否则wa。。。
2、lazy是乘积的形式出现,不是加和*/
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
const long long Nmax=100005LL;
const long long mod=1000000007LL;
long long ans;
int n;
vector<long long> v;
struct Node
{long long a;long long b;
};
Node num[Nmax];
long long a[Nmax],b[Nmax],ab[Nmax];
bool cmp(Node a,Node b)
{if(a.a==b.a)return a.b<b.b;return  a.a<b.a;
}
int get_id(long long x)
{return lower_bound(v.begin(),v.end(),x)-v.begin()+1;
}
struct Tree
{int l;int r;long long sum;long long times;long long lazy;
}tree[Nmax*4];
void build(int root,int l,int r)
{tree[root].l=l;tree[root].r=r;tree[root].sum=tree[root].times=0LL;tree[root].lazy=1LL;if(l==r)return;int mid=(l+r)>>1;build(root<<1,l,mid);build(root<<1|1,mid+1,r);
}void push_down(int root)
{if(tree[root].l==tree[root].r){tree[root].lazy=1LL;return;}if(tree[root].lazy!=1LL){tree[root<<1].lazy=(tree[root<<1].lazy*tree[root].lazy)%mod;tree[root<<1|1].lazy=(tree[root<<1|1].lazy*tree[root].lazy)%mod;tree[root<<1].sum=(tree[root<<1].sum*tree[root].lazy)%mod;tree[root<<1|1].sum=(tree[root<<1|1].sum*tree[root].lazy)%mod;tree[root].lazy=1LL;}
}void insert(int root,int l,int r,int data)
{if(tree[root].l==l&&tree[root].r==r){tree[root].times+=data;return;}push_down(root);int mid=(tree[root].l+tree[root].r)>>1;if(mid>=l)insert(root<<1,l,r,data);if(mid<r)insert(root<<1|1,l,r,data);tree[root].times=tree[root<<1].times+tree[root<<1|1].times;
}
void insert_sum(int root,int l,int r,int data)
{if(tree[root].l>=l&&tree[root].r<=r){tree[root].sum=(tree[root].sum+data)%mod;return;}push_down(root);int mid=(tree[root].l+tree[root].r)>>1;if(mid>=l)insert_sum(root<<1,l,r,data);if(mid<r)insert_sum(root<<1|1,l,r,data);tree[root].sum=(tree[root<<1].sum+tree[root<<1|1].sum)%mod;
}long long query_sum(int root,int l,int r)
{if(tree[root].l>=l&&tree[root].r<=r){return tree[root].sum%mod;}push_down(root);int mid=(tree[root].l+tree[root].r)>>1;long long ans=0LL;if(mid>=l)ans=( ans+query_sum(root<<1,l,r) )%mod;if(mid<r)ans=( ans+query_sum(root<<1|1,l,r) )%mod;while(ans<0)ans+=mod;return ans;
}long long query(int root,int l,int r)
{if(tree[root].l>=l&&tree[root].r<=r){return tree[root].times;}int mid=(tree[root].l+tree[root].r)>>1;long long ans=0LL;if(mid>=l)ans+=query(root<<1,l,r);if(mid<r)ans+=query(root<<1|1,l,r);return ans;
}void init()
{v.clear();ans=0LL;build(1,1,n);
}int qpow(long long base,long long n)
{base=base%mod;long long ans=1LL;while(n>0){if(n&1)ans=(ans*base)%mod;base=base*base%mod;n>>=1;}while(ans<0)ans+=mod;return ans;
}void update(int root,int l,int r)
{if(tree[root].l>=l && tree[root].r<=r){tree[root].lazy=(tree[root].lazy*2LL)%mod;tree[root].sum=(tree[root].sum*2LL)%mod;return;}push_down(root);int mid=(tree[root].l+tree[root].r)>>1;if(mid>=l)update(root<<1,l,r);if(mid<r)update(root<<1|1,l,r);tree[root].sum=(tree[root<<1].sum+tree[root<<1|1].sum)%mod;
}void watch(int root,int l,int r)
{printf("tree[%d]: l:%d,r:%d,sum:%lld,times:%lld,lazy:%lld\n",root,tree[root].l,tree[root].r,tree[root].sum,tree[root].times,tree[root].lazy);if(l==r)return;int mid=(l+r)>>1;watch(root<<1,1,mid);watch(root<<1|1,mid+1,r);
}
int main()
{//freopen("hdu4913.in","r",stdin);while(scanf("%d",&n)==1){init();for(int i=1;i<=n;i++){scanf("%lld%lld",&num[i].a,&num[i].b);v.push_back(num[i].b);}sort(v.begin(),v.end());v.erase(unique(v.begin(),v.end()),v.end());sort(num+1,num+1+n,cmp);int m=v.size();for(int i=1;i<=n;i++){//printf("times[%d]:\n",i);int b=get_id(num[i].b);//printf("b:%d\n",b);//printf("before:\n");//watch(1,1,n);//printf("after:\n");//watch(1,1,n);//printf("end!!!!!!!!!!!!!!!!!\n");insert(1,b,b,1);long long x=query(1,1,b);//printf("%lld:%lld\n",query(1,1,b),query(1,b,b)); //printf("x:%lld\n",x); x=qpow(2,x-1);//printf("x:%lld\n",x);
x= (x*qpow(3,num[i].b)) %mod;//printf("x:%lld\n",x);ans=( ans+ qpow(2,num[i].a)*x )%mod;//printf("ans:%lld\n",ans);//if(kkk==0)//if(b!=n)if(b!=n)ans=(ans+(qpow(2,num[i].a)* query_sum(1,b+1,n)) %mod)%mod;//printf("ans:%lld\n",ans);if(b!=n)update(1,b+1,n);insert_sum(1,b,b,x);//watch(1,1,n);
        }while(ans<0)ans+=mod;//printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n\n\n");printf("%lld\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/BBBob/p/6522847.html

相关文章:

JS ES6 实用笔记

微信小程序开发交流qq群 581478349 承接微信小程序开发。扫码加微信。 这篇博文我会一直更新。 一.导出导入的两中方式 1.export //demo1.js export const a 6 导入语法为&#xff1a; import {a} form demo1 2.export default //demo2.js export default const b 6 …

extjs editgrid增加一行

Ext.onReady(function(){ /* * EditorGridPanel的工作过程 * 1、用户点击单元格 * 2、单元格按照预设的组件显示单元格的内容并处于编辑状态 * 3、离开单元格的编辑状态 * 4、更新编辑后的内容&#xff0c;出现三角号表示已经被修改过 * 5、程序内部变化&#xff1a;将记录设置…

unity 骨骼击碎_保证击碎$ 100挑战的创新策略

unity 骨骼击碎by Glenn Gonda由Glenn Gonda 保证击碎$ 100挑战的创新策略 (A Creative Strategy Guaranteed to Crush the $100 Challenge) Before I became a software engineer, I made my living as a recording studio engineer. I have a non-traditional background an…

mac下安装libpng环境

用go写一个爬虫工具时需要使用一个go的库&#xff0c;而这个库有需要使用libpng库&#xff0c;不然编译就会提示说 png.h找不到等之类的信息&#xff0c;于是想到应该和windows一样需要安装gcc环境&#xff0c;然后让gcc里安装libpng这个库&#xff0c; 解决办法&#xff1a; 终…

linux oracle修改编码utf8

$ sqlplus /nolog SQL> connect sys/oracle as sysdba SQL> startup 如何设置ORACLE数据库的编码&#xff08;ZHS16GBK&#xff09;修改成UTF8 SQL> shutdown immediate; SQL> startup mount; SQL> alter system enable restricted session; SQL> alter sy…

Vue.js 数据绑定渲染Demo

微信小程序开发交流qq群 581478349 承接微信小程序开发。扫码加微信。 <div id"app">{{ message }} </div>var app new Vue({el: #app,data: {message: Hello Vue!} })Hello Vue!

angular搭建项目步骤_建立健康的Angular项目应采取的步骤

angular搭建项目步骤by Ashish Gaikwad通过Ashish Gaikwad 建立健康的Angular项目应采取的步骤 (Steps you should take to build a healthy Angular project) 使用Jenkins SonarQube创建您的“ Angular Fitbit” (Create your “Angular Fitbit” with Jenkins SonarQube) …

数据库的三大范式和事物

来源&#xff1a;http://blog.csdn.net/w__yi/article/details/19934319 1.1 第一范式&#xff08;1NF&#xff09;无重复的列 1.2 第二范式&#xff08;2NF&#xff09;属性完全依赖于主键 [ 消除部分子函数依赖 ] 1.3 第三范式&#xff08;3NF&#xff09;属性不依赖于其它非…

过滤器和包装器

作者&#xff1a;禅楼望月 过滤器要做的事情 请求过滤器 完成安全检查 重新格式化请求首部或体 建立请求审计或日志响应过滤器 压缩响应流 追加或修改响应流 创建一个完全不同的响应注意不能把过滤器的顺序依赖性硬编码进程序中&#xff0c;它应该由DD控制。 过滤器很像Servlet…

Missing space before value for key 'path'vue.js解决空格报错

微信小程序开发交流qq群 581478349 承接微信小程序开发。扫码加微信。 找到 webpack.base.config.js文件注释掉下面的东西&#xff01;&#xff01; module: { rules: [ /*{ test: /\.(js|vue)$/, loader: eslint-loader, enforce: "p…

现代hy-9600音响_从音响工程师到软件工程师-为什么我要学习编码

现代hy-9600音响by Kalalau Cantrell通过Kalalau Cantrell 从音响工程师到软件工程师-为什么我要学习编码 (From Sound Engineer to Software Engineer — Why I’m Learning to Code) I seriously started teaching myself to code several months ago. I say “seriously” …

微信服务号、公众号、企业号注册

转载于:https://www.cnblogs.com/zhoulaoshi/p/6536850.html

a标签onclick事件解析

微信小程序开发交流qq群 581478349 承接微信小程序开发。扫码加微信。 简单介绍<a>标签的常用点击事件的写法及作用 a href"javascript:void(0);" οnclick"js_method()" //javascript:void(0);作用是返回undefined&#xff0c;地址不发生跳转&am…

安卓版文字扫描识别软件

安卓版文字扫描识别软件 文字识别软件被越来越多的人使用&#xff0c;在使用的过程中也发现了一些问题。总结这些问题发现&#xff0c;很多人对软件能够批量识别这个问题比较关注。如果实现批量识别就可以节省时间。但是一些软件还不能实现批量识别&#xff0c;还有的软件能够做…

中级前端笔试_在短短8个月内如何获得中级前端开发人员的角色

中级前端笔试by Matthew Burfield通过马修伯菲尔德(Matthew Burfield) 在短短8个月内如何获得中级前端开发人员的角色 (How I got a mid-level front end developer role in just 8 months) Three weeks ago I landed a mid-level front-end developer role at a startup. Our…

用stm32f10x建立新的工程重要步骤

stm32f10x系列新建空的工程主要原理&#xff1a; 1.添加启动文件 不同的芯片类型的启动文件的容量是不同的&#xff0c;选择适合该芯片的容量作为启动文件。 注意&#xff1a;启动文件是汇编语言编写的&#xff0c;所以文件的后缀名为.s 2.添加时钟配置 配置文件 stm32f10x.的系…

随机生成6位图片验证码

1. [代码][C#]代码 /// <summary> /// PicHandler1 的摘要说明 /// </summary> public class PicHandler1 : IHttpHandler, IRequiresSessionState { private string mCheckNo string.Empty; protected ImgBuilder _ImgBuilder new I…

html 页面传值

微信小程序开发交流qq群 581478349 承接微信小程序开发。扫码加微信。 直接上代码&#xff0c;JS保存全局变量的三种方式。 创建一个新的JS文件&#xff0c; //quanju.js window.localStorage.JQa"JQA"; window.localStorage.setItem(JQb,JQB);//利用localStora…

node.js的开发流程_Node.js子流程:您需要了解的一切

node.js的开发流程by Samer Buna通过Samer Buna Node.js子流程&#xff1a;您需要了解的一切 (Node.js Child Processes: Everything you need to know) 如何使用spawn()&#xff0c;exec()&#xff0c;execFile()和fork() (How to use spawn(), exec(), execFile(), and fork…

对象存在性检测集中管理

在中大型业务系统中&#xff0c; 常常需要从数据库中查询某个实体对象。 在进行处理之前&#xff0c; 必须先检测该实体是否存在&#xff0c;以增强系统的健壮性。 不过&#xff0c; 检测代码充斥在主业务流程中又会大大降低业务逻辑的清晰性&#xff0c; 最好集中起来进行管理…

20155204 2016-2017-2 《Java程序设计》第3周学习总结

20155204 2016-2017-2 《Java程序设计》第3周学习总结 教材学习内容总结 一个原始码中可以有多个类定义&#xff0c;但只能有一个公开类。留心Scanner对于每一种类型的nextxxxx()方法以Java开头的都是API提供的类使用Integer.valueOf()也是为基本类型建立打包器的方式之一Integ…

js表单提交,支持图片上传,包含后端php代码

微信小程序开发交流qq群 581478349 承接微信小程序开发。扫码加微信。 <html><head><meta http-equiv"Content-Type" content"charsetutf-8" /><title>图片上传成功</title></head><body><form name"…

如何破解汽车-快速的速成课程

by Kenny Kuchera肯尼库切拉(Kenny Kuchera) 如何破解汽车-快速的速成课程 (How to hack a car — a quick crash-course) The goal of this article is to get you started hacking cars — fast, cheap, and easy. In order to do this, we’ll spoof the RPM gauge as an e…

367. Valid Perfect Square

题目&#xff1a; Given a positive integer num, write a function which returns True if num is a perfect square else False. Note: Do not use any built-in library function such as sqrt. Example 1: Input: 16 Returns: TrueExample 2: Input: 14 Returns: False 链接…

使用reuseport和recvmmsg优化UDP服务器

http://skoo.me/system/2014/03/18/udp-server-performance/ http://www.helplib.net/s/linux.die/65_3223/man-2-recvmmsg.shtml recvmmsg(2) - Linux man page转载于:https://www.cnblogs.com/jingzhishen/p/4145732.html

js把for循环出来的数据存入数组

微信小程序开发交流qq群 581478349 承接微信小程序开发。扫码加微信。 var obj [];for(var i 0;i<obj.length;i){arr.push(obj[i]);}; console.obj(arr); 1&#xff1a;obj是一个数组对象 2&#xff1a;push()方法是数组的栈底添加 意思是往数组的底部添加 3&#xff1a…

flexbox布局_这是您可以使用FlexBox制作的5种布局

flexbox布局The CSS Flexible Box Layout — Flexbox — provides a simple solution to the design and layout problems designers and developers have faced with CSS. Let me show you how to use it to generate some common layouts and challenges that you will face …

数据结构之线性表

数据结构之线性表 目录 概述顺表特点 顺表的操作 准备 创建顺表 查询顺表长度 遍历顺表 按序查找 按值查找 插入 删除 链表实际使用概述 线性表是一种线性的存储结构&#xff0c;表头有唯一后继元素&#xff0c;表尾有唯一前驱元素&#xff0c;表中的元素既有前驱又有后继 顺表…

【BZOJ-3456】城市规划 CDQ分治 + NTT

题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id3456 Solution 这个问题可以考虑dp&#xff0c;利用补集思想 N个点的简单图总数量为$2^{\binom{N}{2}}$&#xff0c;要求的是简单联通图&#xff0c;所以可以用总量减不连通的。 不连通的可以通过枚举与某个固定点的…

微信小程序获取openid和session_key并且把openid存入数据库

微信小程序开发交流qq群 581478349 微信小程序获取openid和session_key并且把openid存入数据库。已经调用openid的demo 前后端代码都有&#xff0c;后端php实现 在其它地方同步调用openid。&#xff08;确保用户完成登录再进行后续的操作&#xff09;&#xff1b; onLoad…