博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uestc 1425 Another LCIS 线段树 区间合并
阅读量:6911 次
发布时间:2019-06-27

本文共 2458 字,大约阅读时间需要 8 分钟。

结点记录的信息:

lics:区间lics的大小

lv、rv:区间左右端点的值

lpart:以左端点为起点的ics的大小

rpart:以右端点为终点的ics的大小

//#pragma comment(linker, "/STACK:1024000000,1024000000")#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;typedef pair
pii;#define pb(a) push_back(a)#define INF 0x1f1f1f1f#define lson idx<<1,l,mid#define rson idx<<1|1,mid+1,r#define PI 3.1415926535898template
T min(const T& a,const T& b,const T& c) { return min(min(a,b),min(a,c));}template
T max(const T& a,const T& b,const T& c) { return max(max(a,b),max(a,c));}#define clr0(a) memset(a,0,sizeof(a))#define clr1(a) memset(a,-1,sizeof(a))void debug() {#ifdef ONLINE_JUDGE#else freopen("d:\\in.txt","r",stdin); freopen("d:\\out1.txt","w",stdout);#endif}char getch() { char ch; while((ch=getchar())!=EOF) { if(ch!=' '&&ch!='\n')return ch; } return EOF;}struct node{ int lics,lpart,rpart,lv,rv,len; node(){} node(int lics,int lpart,int rpart,int lv,int rv,int len):lics(lics),lpart(lpart),rpart(rpart),lv(lv),rv(rv),len(len){}};const int maxn=100010;node tree[maxn<<2];int add[maxn<<2];int Merge(node &idx,node &a,node &b){ if(a.rv
>1; Build(lson);Build(rson); Merge(tree[idx],tree[idx<<1],tree[idx<<1|1]); add[idx]=0; return 0;}int Update(int idx,int l,int r,int tl,int tr,int v){ if(tl<=l&&tr>=r) { add[idx]+=v; tree[idx].lv+=v;tree[idx].rv+=v; return 0; } PushDown(idx); int mid=(r+l)>>1; if(tl<=mid)Update(lson,tl,tr,v); if(tr>mid)Update(rson,tl,tr,v); Merge(tree[idx],tree[idx<<1],tree[idx<<1|1]); return 0;}node Quary(int idx,int l,int r,int tl,int tr){ if(tl<=l&&tr>=r) { return tree[idx]; } PushDown(idx); int mid=(r+l)>>1; node q; if(tl<=mid&&tr>mid) { node a,b; a=Quary(lson,tl,tr); b=Quary(rson,tl,tr); Merge(q,a,b); }else if(tl<=mid) { q= Quary(lson,tl,tr); }else q= Quary(rson,tl,tr); Merge(tree[idx],tree[idx<<1],tree[idx<<1|1]); return q;}int main(){ int t; scanf("%d",&t); for(int ca=1;ca<=t;ca++) { int n,q; scanf("%d%d",&n,&q); Build(1,1,n); printf("Case #%d:\n",ca); for(int i=1;i<=q;i++) { char op[10]; scanf("%s",op); if(op[0]=='a') { int l,r,v; scanf("%d%d%d",&l,&r,&v); Update(1,1,n,l,r,v); }else { int l,r; scanf("%d%d",&l,&r); node x=Quary(1,1,n,l,r); printf("%d\n",x.lics); } } } return 0;}
View Code

 

转载于:https://www.cnblogs.com/BMan/p/3264254.html

你可能感兴趣的文章
实战:XtraBackup for mysql 5.6自动还原脚本
查看>>
CentOS https 客户端证书制作
查看>>
hardware information
查看>>
针对云安全从业者的指南系列一:云安全实施企业面临的背景
查看>>
我的友情链接
查看>>
OpenLDAP 客户端部署
查看>>
恢复误删除的ESXi服务器存储VMFS卷
查看>>
Java设计模式01-代理模式
查看>>
用户管理,权限管理
查看>>
C++11 委派构造函数特性怎么使用?
查看>>
saltstck源码安装mysql
查看>>
Linux下安装LoadRunner Agent
查看>>
haproxy+pacemeker
查看>>
db2死锁和锁超时
查看>>
C语言学习总结
查看>>
You don't have permission to access / on this server.
查看>>
C言语二分查找(折半查找)算法及代码
查看>>
输出/输入(I/O)常识点汇总
查看>>
计算机系统介绍
查看>>
【职业心得】售前工程师的成长
查看>>