一点都不良心!!!!


AK 快乐

爆零快乐!!!


1、

Avalue
512mb 1s
规定一个区间的价值为这个区间中所有数 and 起来的值与这个区间所有数 or 起
来的值的乘积。
例如 3 个数 2,3,6。它们 and 起来的值为 2, or 起来的值为 7,这个区间对答
案的贡献为 2*7=14。
现在有一个 n 个数的序列, 想知道所有 n*(n+1)/2 个区间的贡献的和对
1000000007 取模后的结果是多少。
例如当这个序列为{3,4,5}时,那么区间[1,1],[1,2],[1,3],[2,2],[2,3],[3,3]的贡献
分别为 9,0,0,16,20,25。
Input
第一行一个数 n
接下来一行 n 个数 ai,表示这 n 个数(0<=ai<=10^9)。
Output
一行表示答案。
Input
3
4 5
Output
70
limit
%30 n<=1000
%100 n<=100000

我打的是nlog^2 拆位树状数组维护,f[i]表示区间i~现在循环到的点,的&值,g[i]表示|值。

然后记录最后连续有多少个1或者0,然后区间修改f和g。。

【慢且错 不说话。。

正解是,不用拆位,也是维护f,g,然后当前f和g的不同的值只有logn个,并且是单调的,然后说可以用链表?[我觉得是单调队列啊ORZ。。

这样就nlogn了。。。

要不要放我的垃圾代码:

  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<cstring>
  4. #include<iostream>
  5. #include<algorithm>
  6. using namespace std;
  7. #define Maxn 100010
  8. #define Mod 1000000007
  9. #define LL long long
  10.  
  11. LL a[Maxn];
  12. LL f[][Maxn],g[][Maxn];
  13. LL ct[],lt[];
  14. LL n;
  15.  
  16. void add(LL x,LL l,LL r,LL c)
  17. {
  18. if(l>r) return;
  19. c%=Mod;
  20. // printf("%lld %lld %lld %lld\n",x,l,r,c);
  21. for(LL i=l;i<=n;i+=i&(-i))
  22. f[x][i]=(f[x][i]+c)%Mod,g[x][i]=(g[x][i]+l*c)%Mod;
  23. r++;
  24. for(LL i=r;i<=n;i+=i&(-i))
  25. f[x][i]=(f[x][i]+Mod-c)%Mod,g[x][i]=(g[x][i]+Mod-(r*c)%Mod)%Mod;
  26. }
  27.  
  28. LL gsum(LL x,LL l,LL r)
  29. {
  30. if(l>r) return ;
  31. // printf("ask:%lld %lld %lld ",x,l,r);
  32. LL ans=;
  33. for(LL i=r;i>=;i-=i&(-i))
  34. ans=(ans+(r+)*f[x][i]-g[x][i])%Mod;
  35. l--;
  36. for(LL i=l;i>=;i-=i&(-i))
  37. ans=(ans-(l+)*f[x][i]+g[x][i])%Mod;
  38. // printf("%lld\n",ans);
  39. ans=(ans%Mod+Mod)%Mod;
  40. return ans;
  41. }
  42.  
  43. int main()
  44. {
  45. LL ans=;
  46. scanf("%lld",&n);
  47. for(LL i=;i<=n;i++) scanf("%lld",&a[i]);
  48. memset(f,,sizeof(f));
  49. memset(g,,sizeof(g));
  50. for(LL i=;i<=;i++) lt[i]=-,ct[i]=n+;
  51. LL sum=;
  52. for(LL i=;i<=n;i++)
  53. {
  54. for(LL j=;j<=;j++)
  55. {
  56. LL y=a[i]&(1LL<<j-);
  57. if(y==)
  58. {
  59. if(lt[j]!=)
  60. {
  61. sum=sum-((1LL<<j-)*gsum(,ct[j],i-))%Mod;
  62. sum=(sum%Mod+Mod)%Mod;
  63. // printf("sum=%lld\n",sum);
  64. // add(2,ct[j],i-1,-(1LL<<j-1)*gsum(1,ct[j],i-1));
  65. add(,ct[j],i-,-(1LL<<j-));
  66. lt[j]=;ct[j]=i;
  67. }
  68. }
  69. else
  70. {
  71. if(lt[j]!=)
  72. {
  73.  
  74. sum=sum+((1LL<<j-)*gsum(,ct[j],i-))%Mod;
  75. sum=(sum%Mod+Mod)%Mod;
  76. // printf("sum=%lld\n",sum);
  77. // add(2,ct[j],i-1,(1LL<<j-1)*gsum(0,ct[j],i-1));
  78. add(,ct[j],i-,(1LL<<j-));
  79. lt[j]=;ct[j]=i;
  80. }
  81. }
  82. }
  83. add(,i,i,a[i]);add(,i,i,a[i]);
  84. sum=(sum+a[i]*a[i])%Mod;
  85. //add(2,i,i,(a[i]*a[i])%Mod);
  86. ans=(ans+sum)%Mod;
  87. // printf("sum=%lld\n",sum);
  88. // ans=(ans+gsum(2,1,i))%Mod;
  89. // printf("ans=%lld\n",ans);
  90. ans=(ans%Mod+Mod)%Mod;
  91. }
  92. printf("%lld\n",ans);
  93. return ;
  94. }

真的好丑的code的说。。


2、

Sample Input
3 50
Sample Output
2

数位DP,数位DP,我打的数位DP太垃圾了,,又慢有错ORZ。。

不会告诉你我现在还没调出来,放弃治疗。。。

大数据还是错,应该是中间爆了吧ORZ。。。

233经过GDXB提点,终于AC了。。。。qpow爆了ORZ。。

  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<cstring>
  4. #include<iostream>
  5. #include<algorithm>
  6. using namespace std;
  7. // #define Mod 1000000007
  8. #define LL long long
  9.  
  10. const LL Mod= ;
  11.  
  12. LL n,p;
  13. LL f[][][],g[][][];
  14. LL get_ans1(int x,int fl1,int fl2)
  15. {
  16. if(x==) return ;
  17. LL ans=;
  18. LL y=(n&(1LL<<x-));
  19. if(y!=) y=;
  20. // if(!fl1&&!fl2&&f[x]!=-1) return f[x];
  21. if(f[x][fl1][fl2]!=-) return f[x][fl1][fl2];
  22. LL add=(1LL<<x-)%Mod,ad1=(n&((1LL<<x-)-))+;
  23. if(y==)
  24. {
  25. ans=(ans+get_ans1(x-,,fl2)+add*add)%Mod; //0 -> 1
  26. if(fl1) add=ad1;
  27. add%=Mod;
  28. ans=(ans+get_ans1(x-,fl1,)+((1LL<<x-)%Mod)*add)%Mod;//1 -> 0
  29. }
  30. else //
  31. {
  32. if(!fl1) ans=(ans+get_ans1(x-,fl1,fl2)+add*add)%Mod; //1->0
  33. if(fl1) add=(n&((1LL<<x-)-))+;
  34. add%=Mod;
  35. if(!fl2) ans=(ans+get_ans1(x-,fl1,fl2)+add*((1LL<<x-)%Mod))%Mod;//0->1
  36. else ans=(ans+get_ans1(x-,fl1,fl2))%Mod;//0->0
  37. }
  38. f[x][fl1][fl2]=ans;
  39. // if(!fl1&&!fl2) f[x]=ans;
  40. return ans;
  41. }
  42.  
  43. LL qpow(LL x,LL b)
  44. {
  45. x%=Mod;
  46. LL ans=;
  47. while(b)
  48. {
  49. if(b&) ans=(ans*x)%Mod;
  50. x=(x*x)%Mod;
  51. b>>=;
  52. }
  53. return ans;
  54. }
  55.  
  56. LL get_ans2(int x,int fl1,int fl2)
  57. {
  58. if(x==) return ;
  59. LL ans=;
  60. LL y=(n&(1LL<<x-));
  61. if(y!=) y=;
  62. // if(!fl1&&!fl2&&g[x]!=-1) return g[x];
  63. if(g[x][fl1][fl2]!=-) return g[x][fl1][fl2];
  64. LL ad1=1LL<<x-,ad2=(n&((1LL<<x-)-))+,add=ad1;
  65. ad1%=Mod;ad2%=Mod;add%=Mod;
  66. if(y==)
  67. {
  68. if(fl2) add=ad2;add%=Mod;
  69. ans=(ans+get_ans2(x-,,fl2)+((ad1*add)%Mod)*((1LL<<x-)%Mod))%Mod; //0 -> 1
  70. ans=(ans+get_ans2(x-,,))%Mod; //0 -> 0
  71. // if(fl1) add=(n&((1<<x-1)-1))+1;
  72. add=ad1;
  73. add%=Mod;
  74. if(fl1) add=ad2;
  75. add%=Mod;
  76. ans=(ans+get_ans2(x-,fl1,)+((add*ad1)%Mod)*((1LL<<x-)%Mod))%Mod;//1 -> 0
  77. ans=(ans+get_ans2(x-,fl1,fl2))%Mod;//1 -> 1
  78. }
  79. else //
  80. {
  81. if(!fl1)
  82. {
  83. if(!fl2) ans=(ans+get_ans2(x-,fl1,fl2))%Mod; //1->1
  84. if(fl2) add=ad2;add%=Mod;
  85. ans=(ans+get_ans2(x-,fl1,fl2)+((ad1*add)%Mod)*((1LL<<x-)%Mod))%Mod; //1->0
  86. }
  87. // if(fl1) add=(n&((1<<x-1)-1))+1;
  88. add=ad1;
  89. if(fl1) add=ad2;
  90. add%=Mod;
  91. if(!fl2) ans=(ans+get_ans2(x-,fl1,fl2)+((add*ad1)%Mod)*((1LL<<x-)%Mod))%Mod;//0->1
  92. ans=(ans+get_ans2(x-,fl1,fl2))%Mod;//0->0
  93. }
  94. // if(!fl1&&!fl2) g[x]=ans;
  95. ans%=Mod;
  96. g[x][fl1][fl2]=ans;
  97. return ans;
  98. }
  99.  
  100. int main()
  101. {
  102. int mx=;
  103. scanf("%lld%lld",&n,&p);
  104. LL now=n,d,dd;
  105. while(now) mx++,now/=;
  106. memset(f,-,sizeof(f));
  107. n--;
  108. LL a1=get_ans1(mx,,),ans=,a2;
  109. // printf("---%lld\n",a1);
  110. d=qpow(,Mod-);dd=qpow(n+,Mod-);
  111. // ans=(ans+((a1*p)%Mod)*(qpow(100,Mod-2)*qpow(n,Mod-2))%Mod)%Mod;
  112. a1=( ((d*p)%Mod)*((a1*dd)%Mod) )%Mod;
  113. // printf("%lld\n",a1);
  114. ans=(ans+a1)%Mod;
  115. // printf("%lld\n",ans);
  116.  
  117. memset(g,-,sizeof(g));
  118. a2=get_ans2(mx,,);
  119. // printf("---%lld\n",a2);
  120. n++;
  121. d=qpow(,Mod-);dd=qpow(((n%Mod)*(n%Mod))%Mod,Mod-);
  122. // ans=(ans+(a2*(100-p)%Mod)*(qpow(100,Mod-2))*qpow(n*n,Mod-2)%Mod)%Mod;
  123. a2=( ((d*(-p))%Mod)* ((a2*dd)%Mod) )%Mod;
  124. ans=(ans+a2)%Mod;
  125.  
  126. // ans=(ans%Mod+Mod)%Mod;
  127. printf("%lld\n",ans);
  128. return ;
  129. }

无视我的调试真的好丑。。


3、

Sample Input
5 3
1 2
1 3
2 4
4 5
2 2
4 1
2 3
Sample Output
313
HINT
1<=P<=N
1<=K<=N
%30
N<=2000
Q<=2000
%100
N<=100000
Q<=100000

啊,可持久化。。。

就是先算b在a上面,这个直接算

然后就是b在c下面,那么就是a->b->c这条链

然后对于dis[a,c]>=k 那么b有k个位置

对于dis[a,c]<k 有dis[a,c]个位置

算出dfs序,然后就是询问区间小于等于k的东西的值

我打的是字母树。。。

啊啊啊数据开小了就 开心了!!真开心!!!

  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<cstring>
  4. #include<iostream>
  5. #include<algorithm>
  6. using namespace std;
  7. #define Maxn 200010
  8. #define Maxd 30
  9.  
  10. struct node
  11. {
  12. int x,y,next;
  13. }t[Maxn*];int len;
  14. int first[Maxn];
  15.  
  16. void ins(int x,int y)
  17. {
  18. t[++len].x=x;t[len].y=y;
  19. t[len].next=first[x];first[x]=len;
  20. }
  21.  
  22. int dep[Maxn],sm[Maxn],dfn[Maxn],rt[Maxn],cnt=;
  23. void dfs(int x,int f)
  24. {
  25. dfn[x]=++cnt;dep[dfn[x]]=dep[dfn[f]]+;
  26. rt[dfn[x]]=dfn[x];sm[dfn[x]]=;
  27. for(int i=first[x];i;i=t[i].next) if(t[i].y!=f)
  28. {
  29. int y=t[i].y;
  30. dfs(y,x);
  31. sm[dfn[x]]+=sm[dfn[y]];
  32. rt[dfn[x]]=rt[dfn[y]];
  33. }
  34. }
  35.  
  36. int rrt[Maxn];
  37. struct hp
  38. {
  39. int lc,rc,ct,f;
  40. }tr[Maxn*];
  41. int tot=;
  42.  
  43. void upd(int x)
  44. {
  45. tr[x].lc=tr[x].rc=tr[x].ct=;
  46. }
  47.  
  48. void build()
  49. {
  50. int lt;
  51. tr[].lc=tr[].rc=tr[].ct=;
  52. rrt[]=;
  53. for(int i=;i<=cnt;i++)
  54. {
  55. lt=rrt[i-];
  56. rrt[i]=++tot;
  57. int now=rrt[i];
  58. int z=dep[i];
  59. for(int j=Maxd;j>=;j--)
  60. {
  61. int x=(z&(<<j-));
  62. if(x!=) x=;
  63. if(x==)
  64. {
  65. tr[now].lc=++tot;upd(tot);
  66. tr[now].rc=tr[lt].rc;
  67. lt=tr[lt].lc;
  68. tr[tot].ct=tr[lt].ct+;
  69. tr[tot].f=tr[lt].f+z;
  70. now=tot;
  71. }
  72. else
  73. {
  74. tr[now].rc=++tot;upd(tot);
  75. tr[now].lc=tr[lt].lc;
  76. lt=tr[lt].rc;
  77. tr[tot].ct=tr[lt].ct+;
  78. tr[tot].f=tr[lt].f+z;
  79. now=tot;
  80. }
  81. }
  82. }
  83. }
  84.  
  85. int sum;
  86. int query(int l,int r,int x)
  87. {
  88. sum=;int ans=;
  89. l=rrt[l-],r=rrt[r];
  90. for(int i=Maxd;i>=;i--)
  91. {
  92. int y=x&(<<i-);
  93. if(y!=) y=;
  94. if(y==)
  95. {
  96. r=tr[r].lc;
  97. l=tr[l].lc;
  98. }
  99. else
  100. {
  101. sum+=tr[tr[r].lc].ct-tr[tr[l].lc].ct;
  102. ans+=(tr[tr[r].lc].f-tr[tr[l].lc].f);
  103. r=tr[r].rc;
  104. l=tr[l].rc;
  105. }
  106. }
  107. return ans;
  108. }
  109.  
  110. int main()
  111. {
  112. int n,q;
  113. scanf("%d%d",&n,&q);
  114. len=;
  115. memset(first,,sizeof(first));
  116. for(int i=;i<n;i++)
  117. {
  118. int x,y;
  119. scanf("%d%d",&x,&y);
  120. ins(x,y);ins(y,x);
  121. }
  122. dep[]=;
  123. dfs(,);
  124. build();
  125. for(int i=;i<=q;i++)
  126. {
  127. int p,k,ans=;
  128. scanf("%d%d",&p,&k);
  129. if(dep[dfn[p]]->=k) ans+=k*(sm[dfn[p]]-);
  130. else ans+=(dep[dfn[p]]-)*(sm[dfn[p]]-);
  131.  
  132. ans+=query(dfn[p]+,rt[dfn[p]],k++dep[dfn[p]]);
  133. ans+=k*(sm[dfn[p]]--sum)-dep[dfn[p]]*sum-sum;
  134.  
  135. printf("%d\n",ans);
  136. }
  137. return ;
  138. }

改数据范围就A了smg!!!

垃圾的人生!!!坎坷!!!

2016-11-06 17:33:10

【良心noip膜你赛】总结的更多相关文章

  1. [SinGuLaRiTy] NOIP 膜你赛-Day 2

    [SinGuLaRiTy-1031] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 对于所有题目: Time Limit: 1s | Mem ...

  2. [SinGuLaRiTy] NOIP膜你赛-Day 1

    [SinGuLRiTy-1022] Copyright (c) SinGuLaRITy 2017. All Rights Reserved.  对于所有题目:Time Limit:1s || Memo ...

  3. LK的NOIP膜拟赛

    T1 Learn to 签到 [题目描述] 希希最喜欢二进制了.希希最喜欢的运算是\(\wedge\). 希希还喜欢很多\(01\)序列.这些序列一共有\(n\)个,每个的长度为\(m\). 希希有一 ...

  4. cdcqの省选膜你赛

    cdcqの省选膜你赛 比赛当天因为在杠hnoi2016的大数据结构没有参加,今天补了一下.挺好玩的虽然不看一句话题意的话真的卡读题 此生无悔入东方,来世愿生幻想乡 2651. 新史「新幻想史 -现代史 ...

  5. NOIP前模拟赛总结

    NOIP前模拟赛总结 from 2018.10.7 to ??? Date Name Score(Rank) Problems 2018.10.7 McfXH AK Contest 42(?) 期望得 ...

  6. NOIP 膜你题 DAY2

    NOIp膜你题   Day2 duliu 出题人:ZAY     题解 这就是一道组合数问题鸭!!!  可是泥为什么没有推出式子!! 首先我们知道的是 m 盆花都要摆上,然后他们的顺序不定(主人公忘记 ...

  7. NOIP一系列模拟赛小结

    NOIP越发接近了,于是自己也跟着机房的几位师兄一起做了几次NOIP模拟赛,收获颇多. #1-T1:求点集中的点能否只用三条与坐标轴平行的直线就能全部被经过,其实只要将横纵坐标排序后逐个点检查下就行. ...

  8. EZ 2018 01 14 2018noip第四次膜你赛

    这次惨烈的炸了个精光(只有20),然后对我的OI想法造成了巨大的转折. (以上有点作,其实我只是再也不用vector存图了而已(用邻接表)) 难度很不均匀,而且题型很狗(还有结论题???) T1 坑人 ...

  9. JXOJ 9.7 NOIP 放松模拟赛 总结

    比赛链接 T1 数数 题意:有a个红球,b个黄球,c个蓝球,d个绿球排成一列,求任意相邻不同色的排列的数目 ​ 1 <= a , b, c, d <= 30 答案对1e9 + 7 取膜 用 ...

随机推荐

  1. Spring MVC自定义统一异常处理类,并且在控制台中输出错误日志

    在使用SimpleMappingExceptionResolver实现统一异常处理后(参考Spring MVC的异常统一处理方法), 发现出现异常时,log4j无法在控制台输出错误日志.因此需要自定义 ...

  2. ASIC 前端功能验证等级与对应年薪划分[个人意见] (2011-07-04 15:33:35

    下面的讨论转载自eetop,我选取了一些有意义的讨论,加了我的评注. 楼主zhhzhuawei认为 ===================================== 对于ASIC的前端功能验 ...

  3. Orchard 学习-手动安装Orchard

    通过Orchard zip 文件手动配置网站 这篇文章将引导你如果通过Zip文件来安装Orchard. 我们会使用三种不同的方法来承载Orchard: IIS. WebMatrix and IIS E ...

  4. Android测试分析3

    一个基本的测试用例-- 如果是在eclipse中开发,那么需要在AndroidManifest.xml中加入如下两段代码:    <uses-library android:name=" ...

  5. (一)JAVA使用POI操作excel

    1,Poi 简介 Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能 PO ...

  6. 03_天气查询_socket方式模拟_多线程方式

    [简述] 要重视Socket开发,企业后台服务特长使用Socket. 1.服务端要有可持续运行能力,保证线程一致在运行 2.并发处理能力,使用多线程 [工程截图] [WeatherRunner.jav ...

  7. What are TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR (etc.)?

    转自: http://www.codeproject.com/Articles/76252/What-are-TCHAR-WCHAR-LPSTR-LPWSTR-LPCTSTR-etc 解释的超详细!! ...

  8. 安装会声会影x8后打不开的解决方法

    操作系统:Windows 7 症状:双击程序图标后一直停留在购买介绍页,主程序界面一直无法打开 解决方法:删除系统补丁KB3126587和KB3126593

  9. 自己动手丰衣足食,h5手机端jquery弹窗插件(事件冒泡、单例模式、遮盖部分禁止默认滚动)

    感谢浏览,欢迎交流=.= 公司开发微信网页多处需要使用弹窗,使用jquery-ui的定制化下载仍需要150多kb,想来有些奢侈(最终下来只有11kb,压缩后2kb,啊,我的神), 手机端弹窗方式与pc ...

  10. 浏览器信息(Navigator)

    window.navigator 代表正在使用的浏览器的对象. ◆ window.navigator.appCodeName 返回浏览器的代码名."Mozilla" 本来是 Net ...