博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj2906
阅读量:6038 次
发布时间:2019-06-20

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

显然分块,由于颜色也有区间,我们的ans[l,r,k]表示块l和块r颜色1~k的权值和

所以我们块的大小要设为n^(2/3),其它没什么说的,比较水

1 var f:array[0..41,0..41,0..20005] of int64;  2     g:array[0..41,0..20005] of longint;  3     s:array[0..20005] of longint;  4     a,be,q:array[0..50010] of longint;  5     ans,size,t,tot,i,l,r,n,m,te,x,y:longint;  6   7 procedure swap(var a,b:longint);  8   var c:longint;  9   begin 10     c:=a; 11     a:=b; 12     b:=c; 13   end; 14  15 procedure prework; 16   var i,j,k:longint; 17   begin 18     for i:=1 to n do 19       inc(g[be[i],a[i]]); 20     for i:=2 to t do 21       for j:=1 to m do 22         g[i,j]:=g[i-1,j]+g[i,j]; 23     for i:=1 to t do 24     begin 25       for j:=(i-1)*size+1 to n do 26       begin 27         if j mod size=1 then 28         begin 29           for k:=1 to m do 30             f[i,be[j],k]:=f[i,be[j]-1,k]; 31         end; 32         inc(f[i,be[j],a[j]],s[a[j]]*2+1); 33         inc(s[a[j]]); 34       end; 35       for j:=i to t do 36         for k:=1 to m do 37           inc(f[i,j,k],f[i,j,k-1]); 38       fillchar(s,sizeof(s),0); 39     end; 40   end; 41  42 procedure clear; 43   var i:longint; 44   begin 45     for i:=1 to tot do 46       s[q[i]]:=0; 47   end; 48  49 function ask(l,r,x,y:longint):int64; 50   var i:longint; 51   begin 52     tot:=0; 53     ask:=0; 54     if be[l]=be[r] then 55     begin 56       for i:=l to r do 57         if (a[i]>=x) and (a[i]<=y) then 58         begin 59           if s[a[i]]=0 then 60           begin 61             inc(tot); 62             q[tot]:=a[i]; 63           end; 64           ask:=ask+s[a[i]]*2+1; 65           inc(s[a[i]]); 66         end; 67       clear; 68     end 69     else begin 70       ask:=f[be[l]+1,be[r]-1,y]-f[be[l]+1,be[r]-1,x-1]; 71       for i:=l to be[l]*size do 72         if (a[i]>=x) and (a[i]<=y) then 73         begin 74           if s[a[i]]=0 then 75           begin 76             inc(tot); 77             q[tot]:=a[i]; 78             s[a[i]]:=g[be[r]-1,a[i]]-g[be[l],a[i]]; 79           end; 80           ask:=ask+s[a[i]]*2+1; 81           inc(s[a[i]]); 82         end; 83       for i:=(be[r]-1)*size+1 to r do 84         if (a[i]>=x) and (a[i]<=y) then 85         begin 86           if s[a[i]]=0 then 87           begin 88             inc(tot); 89             q[tot]:=a[i]; 90             s[a[i]]:=g[be[r]-1,a[i]]-g[be[l],a[i]]; 91           end; 92           ask:=ask+s[a[i]]*2+1; 93           inc(s[a[i]]); 94         end; 95       clear; 96     end; 97   end; 98  99 begin100   readln(n,m,te);101   size:=1;102   while size*size/n*size
0 then inc(t);111 prework;112 for i:=1 to te do113 begin114 readln(l,r,x,y);115 l:=l xor ans;116 r:=r xor ans;117 x:=x xor ans;118 y:=y xor ans;119 if l>r then swap(l,r);120 if x>y then swap(x,y);121 ans:=ask(l,r,x,y);122 writeln(ans);123 end;124 end.
View Code

 

转载于:https://www.cnblogs.com/phile/p/4472934.html

你可能感兴趣的文章
eclipse struts2 快速表单入门
查看>>
php三维数组变二维数组
查看>>
部署 Web Service 到 SharePoint Server
查看>>
lnmp或ngnix下brophp配置
查看>>
swift - VFL - 1.循环创建控件 2.metrics使用
查看>>
【Android】12.6 利用Intent实现记事本功能(NotePad)
查看>>
ABAP常用函数集锦
查看>>
新的一年开始。
查看>>
.net 做工作流时,生成项目后工具箱里有关工作流的东西不显示解决方法
查看>>
提升 10 倍效率的三件事
查看>>
链接记录
查看>>
tkinter学习系列(二)之窗口的设置
查看>>
liunx笔记
查看>>
Extjs4 Grid单击事件
查看>>
网页请求到页面显示的过程描述
查看>>
菜鸟级asp.net 与ms sql server数据库打交道的简单总结
查看>>
进程 线程
查看>>
IO流之File类
查看>>
(十一)web服务与javaweb结合(2)
查看>>
FZU 1058 粗心的物理学家
查看>>