QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#217276#5114. Cells Coloringucup-team1001TL 0ms0kbC++202.2kb2023-10-16 18:01:342023-10-16 18:01:34

Judging History

你现在查看的是最新测评结果

  • [2023-10-16 18:01:34]
  • 评测
  • 测评结果:TL
  • 用时:0ms
  • 内存:0kb
  • [2023-10-16 18:01:34]
  • 提交

answer

#include<bits/stdc++.h>
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
using namespace std;

#define irep(i,l,r) for(int i = l; i <= r; ++ i)

const int N = 100099;
const int len = 370;
const int K = N / len + 50;
int per[N][555],invp[N][555];
struct stak{
	int tot;
	int opt[505][2];
	stak(){tot = 0;}
	void push(int x,int y){
		opt[++ tot][0] = x, opt[tot][1] = y;
	}
	void top(int &x, int &y){
		x = opt[tot][0], y = opt[tot][1];
	}
	void pop(){
		-- tot;
	}
	int size(){
		return tot;
	}
};
stak p[555];
inline int read(){
	char ch = getchar();
	int s = 0;
	while(!isdigit(ch))ch = getchar();
	while(isdigit(ch))s = (s << 3) + (s << 1) + (ch ^ 48), ch = getchar();
	return s;
}
int main(){
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	int n = read(), m = read(), q = read();
	vector<array<int,2>>quests(q);
	vector<array<int,2>>bd;
	irep(i, 0, q - 1){
		if(read() == 1){
			int line = read(), cloumn = read();
			quests[i] = {cloumn, line};
			bd.push_back({cloumn, line});
		}
		else
		{
			int pos = read();
			quests[i] = {pos, -1};
		}
	}
	sort(bd.begin(), bd.end());
	for(int c = 0; c <= bd.size() / len; c ++)
		for(int i = 1; i <= n; ++ i)
			per[i][c] = invp[i][c] = i;
	irep(ii, 0, q - 1){
		if(quests[ii][1] != -1){
			auto [cloumn, line] = quests[ii];
			array<int, 2>arr = {cloumn, line};
			int x = upper_bound(bd.begin(), bd.end(), arr) - bd.begin();
			x /= len;
			stak temp;		
			while(p[x].size()){
				int c, l;
				p[x].top(c, l);
				if(c < cloumn)break;
				int tx, ty;
				p[x].top(tx, ty);
				temp.push(tx, ty);
				per[invp[l][x]][x] = l + 1;
				per[invp[l + 1][x]][x] = l;
				swap(invp[l][x], invp[l + 1][x]);
				p[x].pop();
			}
			temp.push(cloumn, line);
			while(temp.size()){
				int c, l;
				temp.top(c, l);
				per[invp[l][x]][x] = l + 1;
				per[invp[l + 1][x]][x] = l;
				swap(invp[l][x], invp[l + 1][x]);
				int tx, ty;
				temp.top(tx, ty);
				p[x].push(tx, ty);
				temp.pop();
			}
		}
		else{
			int a = quests[ii][0];
			for(int x = 0; x <= bd.size() / len; ++ x){
				a = per[a][x];
			}
			cout << a << '\n';
		}
	}
}

詳細信息

Test #1:

score: 0
Time Limit Exceeded

input:

3 4 2 1
.***
*..*
**..

output:


result: