【bzoj2120】数颜色 莫队

AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=2120

【题解】

一道很简单的模板题——带修改的莫队

将修改操作与查询操作分开,对于每个查询操作,我们记录一下离他最近的修改操作的编号。

在进行转移的时候不仅需要维护区间,更需要去维护时间。

就是对于当前询问,在这之前的没有修改的修改操作要进行修改,而这之后的已经修改的修改操作要恢复去。

其他的就与普通的莫队算法一样了。

/*************
  bzoj 2120
  by chty
  2016.11.23
*************/
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
#define FILE "read"
#define MAXN 10010
#define up(i,j,n) for(ll i=j;i<=n;i++)
#define down(i,j,n) for(ll i=j;i>=n;i--)
struct node{ll x,y,id,time;}q[MAXN];
struct node2{ll pos,col,pre;}w[MAXN];
ll n,m,cnt1,cnt2,block,now,a[MAXN],last[MAXN],ans[MAXN],vis[MAXN],num[1000100];
char ch[5];
namespace Init{
	char buf[1<<15],*fs,*ft;
	inline char getc(){return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:*fs++;}
	inline ll read(){
		ll x=0,f=1;  char ch=getchar();
		while(!isdigit(ch))  {if(ch=='-')  f=-1;  ch=getchar();}
		while(isdigit(ch))  {x=x*10+ch-'0';  ch=getchar();}
		return x*f;
	}
}using namespace Init;
namespace Mo_Team{
	bool cmp(node a,node b) {return a.x/block==b.x/block?a.yr)  cal(++r);
			while(q[i].yl)  cal(l++);
			while(q[i].x




你可能感兴趣的:(bzoj,莫队)