首页 > WC2018集训 吉老师的军训练

WC2018集训 吉老师的军训练

WC2018集训 吉老师的军训练

#include
#define RG register
#define IL inline
#define _ 200005
#define X 100000000
#define ll unsigned long long
using namespace std;IL int gi(){RG int data = 0 , m = 1; RG char ch = 0;while(ch != '-' && (ch<'0' || ch > '9')) ch = getchar();if(ch == '-'){m = 0; ch = getchar();}while(ch>='0' && ch<='9'){data = (data<<1) + (data<<3) + ch - '0' ;  ch = getchar();}return (m) ? data : -data ; 
}struct HJT{int ls,rs; ll sumK,sumB,tagK,tagB;}t[40*_] ; 
struct YCB{int l,r,ps; ll dk,db;bool operator < (const YCB &B) const{return ps < B.ps ; }
}q[_<<1];
int tot,n,m,Q,X1,X2,Y1,Y2,d,xx,yy,Y[_],rt[_],oo,yoy; ll S,ans ; void Update(int &o,ll l,ll r,int ql,int qr,ll dk,ll db){t[++oo] = t[o]; o = oo ; if(ql <= l && r <= qr){t[o].tagK += dk ; t[o].tagB += db ;t[o].sumK += 1ll * (r - l + 1) * dk ;t[o].sumB += 1ll * (r - l + 1) * db ; return ; }RG int mid = (l + r) >> 1;if(ql <= mid) Update(t[o].ls , l , mid , ql , qr , dk , db) ;if(qr  > mid) Update(t[o].rs , mid + 1 , r , ql , qr , dk , db) ;t[o].sumK = t[t[o].ls].sumK + t[t[o].rs].sumK + (r-l+1) * t[o].tagK ;t[o].sumB = t[t[o].ls].sumB + t[t[o].rs].sumB + (r-l+1) * t[o].tagB ; 
}
ll Query(int &o,int l,int r,int ql,int qr,ll x){if(!o) return 0;if(ql == l && r == qr) return 1ll * t[o].sumK * x + t[o].sumB ;RG int mid = (l + r) >> 1;RG ll Data = (qr-ql+1) * ( t[o].tagK * x  + t[o].tagB );if(qr <= mid) return Data + Query(t[o].ls,l,mid,ql,qr,x) ;else if(ql > mid) return Data + Query(t[o].rs,mid+1,r,ql,qr,x) ;else returnData +Query(t[o].ls,l,mid,ql,mid,x) + Query(t[o].rs,mid+1,r,mid+1,qr,x) ;return 0;
}int main(){freopen("c.in","r",stdin) ;freopen("c.out","w",stdout) ; n = gi(); m = gi(); d = gi(); Q = gi();for(RG int i = 1; i <= d; i ++){X1 = gi(); X2 = gi(); Y1 = gi(); Y2 = gi(); S = gi();q[++tot] = (YCB){X1 , X2 , Y1 , S , 1ll*S*(1-Y1)} ; q[++tot] = (YCB){X1 , X2 , Y2+1 , -S , 1ll*S*Y2 } ;Y[++yoy] = Y1 ; Y[++yoy] = Y2 + 1;}sort(q + 1 , q + tot + 1) ;sort(Y + 1 , Y + yoy + 1) ;rt[0] = ++ oo ;for(RG int i = 1; i <= tot; i ++)rt[i] = rt[i-1] , Update(rt[i] , 1 , X , q[i].l , q[i].r , q[i].dk , q[i].db) ;ans = 0;while(Q --){xx = gi(); yy = gi();X1 = ans % n + 1; X2 = (ans + xx) % n + 1 ;Y1 = ans % m + 1; Y2 = (ans + yy) % m + 1 ;if(X1 > X2) swap(X1 , X2) ;if(Y1 > Y2) swap(Y1 , Y2) ;xx = upper_bound(Y + 1 , Y + yoy + 1 , Y1 - 1) - Y - 1 ;yy = upper_bound(Y + 1 , Y + yoy + 1 , Y2) - Y - 1 ;ans = 0;ans = ans + Query(rt[yy] , 1 , X , X1 , X2 , Y2) ;ans = ans - Query(rt[xx] , 1 , X , X1 , X2 , Y1-1) ;printf("%llu",ans) ; puts("");}return 0;
}

转载于:https://www.cnblogs.com/Guess2/p/8708446.html

更多相关:

  •         Apache POI是一个开源的利用Java读写Excel,WORD等微软OLE2组件文档的项目。        我的需求是对Excel的数据进行导入或将数据以Excel的形式导出。先上简单的测试代码:package com.xing.studyTest.poi;import java.io.FileInputSt...

  • 要取得[a,b)的随机整数,使用(rand() % (b-a))+ a; 要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a; 要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1; 通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。 要取得a到b之间的...

  • 利用本征图像分解(Intrinsic Image Decomposition)算法,将图像分解为shading(illumination) image 和 reflectance(albedo) image,计算图像的reflectance image。 Reflectance Image 是指在变化的光照条件下能够维持不变的图像部分...

  • 题目:面试题39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 限制: 1 <= 数组长度 <= 50000 解题: cl...

  • 题目:二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树:      5     /    2   6   /  1   3示例 1: 输入: [1,6,3,2,5] 输出...

  • 在前一篇博文 https://blog.csdn.net/tao_627/article/details/90901830 中,我顺利将python 3.5.x升级到3.7.3,发现一切都正常,运行 python3 -V 和 pip3 -V 都是正常的,但是当我重启Ubuntu之后,就悲催地发现,终端打不开了,点击图标显示正在打开...

  • 把字符串看作是26进制的数,从后往前翻译,那么就可以把两个串变成对应的26进制的数字,那么只要把两个数加起来除以二就得到中间的串对应的数了,同理再转化回来就行了。但是这样会有一个问题就是串的长度有2e5,26的2e5次方显然不可求,所以需要对每一位进行手动的加和运算。对于两个串,我们假设a串从后往前的每一位对应的数值为a0, a1,...

  • 中国剩余定理说白了就是小学时候的韩信点兵的完全版。给定一系列数,给定条件是一个数MOD这一些列数的结果,问你最后这个数最少为多少。 抽象出来就是N个同余方程,利用扩展GCD就可以求得这一结果,本题给定的数都是互质的,因此处理起来就简单了。 代码如下: #include #include #inc...