题解:

https://files.cnblogs.com/files/clrs97/old-solution.pdf

Code:

#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=100010,M=1010,E=5500000,BUF=10000000,OUT=10000000;
unsigned int SA,SB,SC;
int Case,n,p,m,lim,X,i,j,k,op,x,y,a[N],g[N],nxt[N],st[N],en[N],dfn,s[N<<1],q[N];
int b[M],cb,f[M][M],ga[N<<1],gq[N<<1],vl[E],vr[E],w[E],NXT[E],ED;
ll ans[N<<1],bit[N<<1],bitx[N<<1],bity[N<<1],bitxy[N<<1];
char Buf[BUF],*buf=Buf,Out[OUT],*ou=Out;int Outn[30],Outcnt;
inline void read(int&a){for(a=0;*buf<48;buf++);while(*buf>47)a=a*10+*buf++-48;}
inline void read(unsigned int&a){for(a=0;*buf<48;buf++);while(*buf>47)a=a*10+*buf++-48;}
inline void write(ll x){
if(!x)*ou++=48;
else{
for(Outcnt=0;x;x/=10)Outn[++Outcnt]=x%10+48;
while(Outcnt)*ou++=Outn[Outcnt--];
}
}
inline void writeln(ll x){write(x);*ou++='\n';}
inline unsigned int rng61(){
SA^=SA<<16;
SA^=SA>>5;
SA^=SA<<1;
unsigned int t=SA;
SA=SB;
SB=SC;
SC^=t^SA;
return SC;
}
inline void addedge(int x,int y){nxt[y]=g[x];g[x]=y;}
inline void add(int&x,int l,int r,int z){vl[++ED]=l;vr[ED]=r;w[ED]=z;NXT[ED]=x;x=ED;}
void dfs(int x){
lim=st[x]=++dfn;
s[dfn]=1;
for(int i=g[x];i;i=nxt[i])dfs(i);
en[x]=++dfn;
s[dfn]=-1;
}
inline bool cmp(int x,int y){return a[x]<a[y];}
inline void initrect(){
int _=0,i,j;
sort(b+1,b+cb+1);
for(i=1;i<=cb;i++)if(b[i]!=b[i-1])b[++_]=b[i];
cb=_;
for(i=1;i<=cb;i++)for(j=1;j<=cb;j++)f[i][j]=0;
}
inline void maketag(int xl,int xr,int yl,int yr,int p){
xl=lower_bound(b,b+cb+1,xl-1)-b+1;
xr=lower_bound(b,b+cb+1,xr)-b+1;
yl=lower_bound(b,b+cb+1,yl-1)-b+1;
yr=lower_bound(b,b+cb+1,yr)-b+1;
f[xl][yl]+=p;
f[xl][yr]-=p;
f[xr][yl]-=p;
f[xr][yr]+=p;
}
inline void getrect(){
int i,j;
for(i=1;i<=cb;i++)for(j=1;j<=cb;j++){
f[i][j]+=f[i-1][j]+f[i][j-1]-f[i-1][j-1];
if(f[i][j]){
add(ga[b[i-1]+1],b[j-1]+1,b[j],1);
add(ga[b[i]+1],b[j-1]+1,b[j],-1);
}
}
}
inline void solve(int x,int mode){
if(mode==0){
b[++cb]=st[x]-1;
b[++cb]=en[x];
for(int i=g[x];i;i=nxt[i]){
b[++cb]=st[i]-1;
b[++cb]=en[i];
}
}else{
maketag(st[x],en[x],1,lim,1);
maketag(1,lim,st[x],en[x],1);
for(int i=g[x];i;i=nxt[i])maketag(st[i],en[i],st[i],en[i],-2);
}
}
inline void ins(int y,int p){
ll B=1LL*s[X-1]*p,C=1LL*s[y-1]*p,D=1LL*s[X-1]*s[y-1]*p;
for(;y<=lim;y+=y&-y){
bit[y]+=p;
bitx[y]+=B;
bity[y]+=C;
bitxy[y]+=D;
}
}
inline ll ask(int y){
ll A=0,B=0,C=0,D=0;int o=y;
for(;y;y-=y&-y){
A+=bit[y];
B+=bitx[y];
C+=bity[y];
D+=bitxy[y];
}
return A*s[X]*s[o]-B*s[o]-C*s[X]+D;
}
void work(){
read(n),read(p),read(SA),read(SB),read(SC);
for(i=1;i<=n;i++)g[i]=0;
for(i=1;i<=n+n;i++)ga[i]=gq[i]=bit[i]=bitx[i]=bity[i]=bitxy[i]=0;
dfn=ED=0;
for(i=2;i<=p;i++)addedge(i-1,i);
for(i=p+1;i<=n;i++)addedge(rng61()%(i-1)+1,i);
for(i=1;i<=n;i++)a[i]=rng61()%n+1;
dfs(1);
for(i=1;i<=lim;i++)s[i]+=s[i-1];
for(i=1;i<=n;i++){
q[i]=i;
if(en[i]>lim)en[i]=lim;
}
sort(q+1,q+n+1,cmp);
for(i=1;i<=n;i=j){
b[0]=0;
b[cb=1]=lim;
for(j=i;j<=n&&a[q[i]]==a[q[j]];j++)solve(q[j],0);
initrect();
for(k=i;k<j;k++)solve(q[k],1);
getrect();
}
read(m);
for(i=1;i<=m;i++){
read(op),read(x),read(y);
ans[i]=0;
int xl,xr,yl,yr;
if(op==1){
xl=xr=st[x];
yl=yr=st[y];
}else{
xl=1,xr=st[x];
yl=1,yr=st[y];
}
add(gq[xl-1],yl,yr,-i);
add(gq[xr],yl,yr,i);
}
for(X=1;X<=lim;X++){
for(j=ga[X];j;j=NXT[j]){
ins(vl[j],w[j]);
ins(vr[j]+1,-w[j]);
}
for(j=gq[X];j;j=NXT[j]){
k=w[j];
if(k>0)ans[k]+=ask(vr[j])-ask(vl[j]-1);
else ans[-k]-=ask(vr[j])-ask(vl[j]-1);
}
}
for(i=1;i<=m;i++)writeln(ans[i]);
}
int main(){
fread(Buf,1,BUF,stdin);
read(Case);
while(Case--)work();
fwrite(Out,1,ou-Out,stdout);
return 0;
}

  

SDOI2018:原题识别的更多相关文章

  1. #LOJ2564 SDOI2018 原题识别 主席树

    转载请注明原文地址:http://www.cnblogs.com/LadyLex/p/9057297.html 原题链接: 今天考试考了前天的SDOI考题 天啊我菜爆,只有T2拿了30分 然后考试后半 ...

  2. [SDOI2018]原题识别

    题解: ..感觉挺烦得 而且我都没有注意到树随机这件事情.. 就写个30分的莫队.. #include <bits/stdc++.h> using namespace std; #defi ...

  3. [CF676C]Vasya and String(尺取法,原题)

    题目链接:http://codeforces.com/contest/676/problem/C 原题题解链接:http://www.cnblogs.com/vincentX/p/5405468.ht ...

  4. (各个公司面试原题)在线做了一套CC++综合測试题,也来測一下你的水平吧(二)

    刚才把最后的10道题又看了下.也发上来吧. 以下给出试题.和我对题目的一些理解 前10道题地址 (各个公司面试原题)在线做了一套CC++综合測试题.也来測一下你的水平吧(一) 11.设已经有A,B,C ...

  5. NOIP2016原题终结测试(2017081801)

    NOIP2016还有几道原题没有写掉,今天就一并布置掉. 答案的问题,有部分会先放到NOIP题解中,是单独发布的. 最后会汇总放在答案中,各位不要急. 还有,后期会有原创题测试,这个不急,反正11月才 ...

  6. 2019.3.16 noiac的原题模拟赛

    RT,这太谔谔了,我不承认这是模拟赛 但是虽然是搬了三道题,题目本身也还能看,就这么着吧 (怎么机房里就我一道原题都没做过啊 T1 CF24D Broken Robot 比较简单地列出式子之后,我们发 ...

  7. 浅谈《剑指offer》原题:不使用条件、循环语句求1+2+……+n

    转载自:浅谈<剑指offer>原题:求1+2+--+n 如侵犯您的版权,请联系:windeal12@qq.com <剑指offer>上的一道原题,求1+2+--+n,要求不能使 ...

  8. P1048 采药(洛谷,动态规划递推,01背包原题)

    题目直接放链接 P1048 采药 这题只是01背包+背景故事而已 原题来的 PS:我写了一篇很详细的01背包说明,如果下面ac代码有看不懂的地方可以去看看 对01背包的分析与理解(图文) 下面上ac代 ...

  9. NOIP原题 斗地主(20190804)

    题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关 系根据牌的数码表示如下:3<4&l ...

随机推荐

  1. Mock8 moco框架如何返回一个cookie信息

    还是用之前的startupWithCookies.json这个文件,直接往里面添加上面的一个代码: [ { "description":"这是一个会返回cookies信息 ...

  2. IDEA配置注释模板

    直接进入主题: Ctrl+Alt+S进入设置界面(我没改过按键映射,你也可以从File-OtherSetting进入设置),找到Editor->File and Code Templates,先 ...

  3. EF CodeFirst系列(4)--- 数据注释属性

    EFCodeFirst模式使用的是约定大于配置的编程模式,这种模式利用默认约定根据我们的领域模型建立概念模型.然后我们也可以通过配置领域类来覆盖默认约定. 覆盖默认约定主要用两种手段: 1.数据注释属 ...

  4. ACM-ICPC 2018 沈阳赛区网络预赛 D Made In Heaven(第k短路,A*算法)

    https://nanti.jisuanke.com/t/31445 题意 能否在t时间内把第k短路走完. 分析 A*算法板子. #include <iostream> #include ...

  5. 第九节:从源码的角度分析MVC中的一些特性及其用法

    一. 前世今生 乍眼一看,该标题写的有点煽情,最近也是在不断反思,怎么能把博客写好,让人能读下去,通俗易懂,深入浅出. 接下来几个章节都是围绕框架本身提供特性展开,有MVC程序集提供的,也有其它程序集 ...

  6. Java开发之@PostConstruct和@PreDestroy注解

    从Java EE5规范开始,Servlet增加了两个影响Servlet生命周期的注解(Annotation):@PostConstruct和@PreConstruct.这两个注解被用来修饰一个非静态的 ...

  7. Hibernate查询返回自定义VO的两种方式

    说明:createQuery用的hql语句进行查询,createSQLQuery用sql语句查询: 前者以hibernate生成的Bean为对象装入list返回:后者则是以对象数组进行存储: 一.通过 ...

  8. iOS关键词weak和assign的区别

    一.区别 首先说说在什么情况下使用 weak 关键字 1.ARC中,在有可能出现循环引用的时候,往往要通过让其中一端使用weak来解决,比如:delegate 的代理属性. 2.自身已经对它有过一次强 ...

  9. 最新版 IntelliJ IDEA2018.3.x 破解教程

    https://www.cnblogs.com/Candies/p/10050831.html

  10. Python学习笔记八

    类的高级用法 多态:   在其他语言,使用的是类的继承. 在python中,不需要指定数据类型. 基于TCP协议的socket通信实现: 类似于打电话的情景. 服务端: 1.买手机 2.插卡 3.开机 ...