[SDOI2018]原题识别
题解:
。。感觉挺烦得 而且我都没有注意到树随机这件事情。。
就写个30分的莫队。。
#include <bits/stdc++.h>
using namespace std;
#define rint register int
#define IL inline
#define rep(i,h,t) for (int i=h;i<=t;i++)
#define dep(i,t,h) for (int i=t;i>=h;i--)
#define me(x) memset(x,0,sizeof(x))
namespace IO{
char ss[<<],*A=ss,*B=ss;
IL char gc()
{
return A==B&&(B=(A=ss)+fread(ss,,<<,stdin),A==B)?EOF:*A++;
}
template<class T>void read(T &x)
{
rint f=,c; while (c=gc(),c<||c>) if (c=='-') f=-; x=(c^);
while (c=gc(),c>&&c<) x=(x<<)+(x<<)+(c^); x*=f;
}
char sr[<<],z[]; int Z,CC=-;
template<class T>void wer(T x)
{
if (x<) sr[++CC]='-',x=-x;
while (z[++Z]=x%+,x/=);
while (sr[++CC]=z[Z],--Z);
}
IL void wer1()
{
sr[++CC]=' ';
}
IL void wer2()
{
sr[++CC]='\n';
}
template<class T>IL void mina(T &x,T y) { if (x>y) x=y;}
template<class T>IL void maxa(T &x,T y) { if (x<y) x=y;}
template<class T>IL T MIN(T x,T y){return x<y?x:y;}
template<class T>IL T MAX(T x,T y){return x>y?x:y;}
};
using namespace IO;
unsigned int SA, SB, SC;
unsigned int rng61(){
SA ^= SA << ;
SA ^= SA >> ;
SA ^= SA << ;
unsigned int t = SA;
SA = SB;
SB = SC;
SC ^= t ^ SA;
return SC;
}
const int N=4.1e5;
int l,head[N],n,m,c[N];
struct re{
int a,b,c,d;
}e[N],a[N];
IL void arr(int x,int y)
{
e[++l].a=head[x];
e[l].b=y;
head[x]=l;
}
IL void addedge(int x,int y)
{
arr(x,y); arr(y,x);
}
int p;
void gen(){
cin>>n>>p>>SA>>SB>>SC;
l=; me(head);
for(int i = ; i <= p; i++)
addedge(i - , i);
for(int i = p + ; i <= n; i++)
addedge(rng61() % (i - ) + , i);
for(int i = ; i <= n; i++)
c[i] = rng61() % n + ;
}
int cnt,dfn1[N],dfn2[N],dep[N],block,num,pos[N];
int bz[][N],ans[N],jl[N],ans2,po[N],b[N];
void dfs(int x,int y)
{
bz[][x]=y; dep[x]=dep[y]+; dfn1[x]=++cnt;
b[cnt]=x;
for (rint u=head[x];u;u=e[u].a)
{
int v=e[u].b;
if (v!=y) dfs(v,x);
}
dfn2[x]=++cnt; b[cnt]=x;
}
void change(int x,int k)
{
x=b[x]; int o;
jl[x]+=k;
if (jl[x]==) o=; else o=-;
if (ans[c[x]]>) ans2--;
ans[c[x]]+=o;
if (ans[c[x]]>) ans2++;
}
int lca(int x,int y)
{
if (dep[x]<dep[y]) swap(x,y);
dep(i,,)
if (dep[bz[i][x]]>=dep[y])
x=bz[i][x];
if (x==y) return(x);
dep(i,,)
if (bz[i][x]!=bz[i][y])
x=bz[i][x],y=bz[i][y];
return bz[][x];
}
bool cmp(re x,re y)
{
int k1=pos[x.a],k2=pos[y.a];
return k1<k2||(k1==k2&&x.b<y.b);
}
int main()
{
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
ios::sync_with_stdio(false);
int T,m;
cin>>T;
while (T--)
{
me(ans); me(jl); cnt=; ans2=;
gen();
dfs(,);
rep(i,,)
rep(j,,n)
bz[i][j]=bz[i-][bz[i-][j]];
cin>>m;
rep(i,,m)
{
int kk,x,y;
cin>>kk>>x>>y;
int k=lca(x,y);
if (k!=x&&k!=y)
{
if (dfn1[x]>dfn1[y]) swap(x,y);
a[i].a=dfn2[x],a[i].b=dfn1[y];
a[i].c=k;
} else
{
if (y==k) swap(x,y);
a[i].a=dfn1[x],a[i].b=dfn1[y];
a[i].c=;
}
a[i].d=i;
}
int n1=*n;
block=sqrt(n1);
num=(n1-)/block+;
rep(i,,n1) pos[i]=(i-)/block+;
sort(a+,a+m+,cmp);
rep(i,,m)
{
if (a[i].a<=a[i-].a)
rep(j,a[i].a,a[i-].a-) change(j,);
if (a[i].b>=a[i-].b)
rep(j,a[i-].b+,a[i].b) change(j,);
if (a[i].a>a[i-].a)
rep(j,a[i-].a,a[i].a-) change(j,-);
if (a[i].b<a[i-].b)
rep(j,a[i].b+,a[i-].b) change(j,-);
if (a[i].c)
{
if (ans[c[a[i].c]]==) po[a[i].d]=ans2+;
else po[a[i].d]=ans2;
} else po[a[i].d]=ans2;
}
rep(i,,m) wer(po[i]),wer2();
}
fwrite(sr,,CC+,stdout);
return ;
}
[SDOI2018]原题识别的更多相关文章
- #LOJ2564 SDOI2018 原题识别 主席树
转载请注明原文地址:http://www.cnblogs.com/LadyLex/p/9057297.html 原题链接: 今天考试考了前天的SDOI考题 天啊我菜爆,只有T2拿了30分 然后考试后半 ...
- SDOI2018:原题识别
题解: https://files.cnblogs.com/files/clrs97/old-solution.pdf Code: #include<cstdio> #include< ...
- [CF676C]Vasya and String(尺取法,原题)
题目链接:http://codeforces.com/contest/676/problem/C 原题题解链接:http://www.cnblogs.com/vincentX/p/5405468.ht ...
- (各个公司面试原题)在线做了一套CC++综合測试题,也来測一下你的水平吧(二)
刚才把最后的10道题又看了下.也发上来吧. 以下给出试题.和我对题目的一些理解 前10道题地址 (各个公司面试原题)在线做了一套CC++综合測试题.也来測一下你的水平吧(一) 11.设已经有A,B,C ...
- NOIP2016原题终结测试(2017081801)
NOIP2016还有几道原题没有写掉,今天就一并布置掉. 答案的问题,有部分会先放到NOIP题解中,是单独发布的. 最后会汇总放在答案中,各位不要急. 还有,后期会有原创题测试,这个不急,反正11月才 ...
- 2019.3.16 noiac的原题模拟赛
RT,这太谔谔了,我不承认这是模拟赛 但是虽然是搬了三道题,题目本身也还能看,就这么着吧 (怎么机房里就我一道原题都没做过啊 T1 CF24D Broken Robot 比较简单地列出式子之后,我们发 ...
- 浅谈《剑指offer》原题:不使用条件、循环语句求1+2+……+n
转载自:浅谈<剑指offer>原题:求1+2+--+n 如侵犯您的版权,请联系:windeal12@qq.com <剑指offer>上的一道原题,求1+2+--+n,要求不能使 ...
- P1048 采药(洛谷,动态规划递推,01背包原题)
题目直接放链接 P1048 采药 这题只是01背包+背景故事而已 原题来的 PS:我写了一篇很详细的01背包说明,如果下面ac代码有看不懂的地方可以去看看 对01背包的分析与理解(图文) 下面上ac代 ...
- NOIP原题 斗地主(20190804)
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关 系根据牌的数码表示如下:3<4&l ...
随机推荐
- 关于boost中enable_shared_from_this类的原理分析
首先要说明的一个问题是:如何安全地将this指针返回给调用者.一般来说,我们不能直接将this指针返回.想象这样的情况,该函数将this指针返回到外部某个变量保存,然后这个对象自身已经析构了,但外部变 ...
- spring3.1 profile 配置不同的环境
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- mysql select in 怎么优化
2017年7月10日 22:36:54 星期一 原理: 把select where in 变换成 "where = " 或者 "where between and &qu ...
- Golang -- Signal处理
我们在生产环境下运行的系统要求优雅退出,即程序接收退出通知后,会有机会先执行一段清理代码,将收尾工作做完后再真正退出.我们采用系统Signal来 通知系统退出,即kill pragram-pid.我们 ...
- push to origin/master was rejected错误解决方案
idea中,发布项目到OSChina的Git中,当时按照这样的流程添加Git,然后push,提示:push to origin/master war rejected". 解决方案如下: 1 ...
- [C][代码实例]冒泡排序
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h& ...
- Java对数
java对数 先看看Java源码里的对数函数(在Java.lang.Math里) 方法1:log() 作用:返回以自然常数e为底数的对数值 说明: e ≍ 2.71828 18284 59045 23 ...
- Confluence 6 管理应用服务器内存设置
应用服务器中的最小和最大 JVM Heap 空间配置将会影响系统的性能.Confluence 管理员可能希望对默认的配置进行修改,基于你系统的负载不同配置情况也会有所不同,请参考页面 Server H ...
- Confluence 6 启用远程 API
XML-RPC 和 SOAP 远程 API 从 Confluence 5.5 开始已经废弃了.我们推荐你使用完全支持的Confluence Server REST API. 希望启用 XML-RPC ...
- RefineDet算法笔记
---恢复内容开始--- 一.创新点 针对two-stage的速度慢以及one-stage精度不足提出的方法,refinedet 包括三个核心部分:使用TCB来转换ARM的特征,送入ODM中进行检测: ...