QOJ.ac
QOJ
The 2nd Universal Cup Finals is coming! Check out our event page, schedule, and competition rules!
ID | Submission ID | Problem | Hacker | Owner | Result | Submit time | Judge time |
---|---|---|---|---|---|---|---|
#1035 | #660269 | #21672. 【NOIP Round #1】冲塔 | wth2026 | max666dong123 | Failed. | 2024-10-21 20:06:50 | 2024-10-21 20:06:50 |
Details
Extra Test:
Invalid Input
input:
1000000 649299 83953 1881 217744 399109 183507 476264 993778 539605 376649 485168 216608 783411 274803 859635 90973 493842 718719 138821 474817 243390 924000 877385 77303 854737 57007 889179 536184 801032 913402 345390 292137 67845 489155 671745 436032 982520 322339 939341 799304 270049 370847 90957...
output:
result:
FAIL same coordinate
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#660269 | #21672. 【NOIP Round #1】冲塔 | max666dong123 | 100 ✓ | 2091ms | 405772kb | C++14 | 5.5kb | 2024-10-20 09:51:57 | 2024-10-20 09:51:58 |
answer
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e6+10;
namespace TEST3{
const int N=2e6+10;
int n;
struct node{
int x,y;
int i;
}a[N];
map<int,int>mp;
vector<int>b;
int idx;
struct NODE{
int y;
int i;
};
list<NODE>row[N];
int line[N][2];
int len[N];
bool ans[N];
void del(int r,int pos){
if(pos==1){
len[row[r].front().y]--;
row[r].pop_front();
}
else{
len[row[r].back().y]--;
row[r].pop_back();
}
if(row[r].size()<=1){
return;
}
list<NODE>::iterator it;
if(pos==1){
it=row[r].begin();
}
else{
it=row[r].end();it=next(it,-1);
}
if(len[it->y]<=1){
line[it->y][++len[it->y]]=r;
}
else{
int pos=1;
if(row[line[it->y][2]].front().y==it->y){
}
else{
pos=2;
}
del(line[it->y][2],pos);
line[it->y][++len[it->y]]=r;
}
}
bool cmp(node x,node y){
return x.x<y.x||(x.x==y.x&&x.y<y.y);
}
signed main(){
// freopen("tower.in","r",stdin);
// freopen("tower.out","w",stdout);
// scanf("%lld",&n);
for(int i=1;i<=n;i++){
// scanf("%lld%lld",&a[i].x,&a[i].y);
b.push_back(a[i].x);
b.push_back(a[i].y);
a[i].i=i;
}
sort(b.begin(),b.end());
for(int x:b){
if(mp[x]){
continue;
}
mp[x]=++idx;
}
for(int i=1;i<=n;i++){
a[i].x=mp[a[i].x];
a[i].y=mp[a[i].y];
// cout<<a[i].y<<" "<<i<<endl;
}
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++){
row[a[i].x].push_back({a[i].y,a[i].i});
}
for(int i=1;i<=idx;i++){
if(row[i].size()<=0){
continue;
}
list<NODE>::iterator it=row[i].begin();
if(len[it->y]<=1){
line[it->y][++len[it->y]]=i;
}
else{
int pos=1;
if(row[line[it->y][2]].front().y==it->y){
}
else{
pos=2;
}
del(line[it->y][2],pos);
line[it->y][++len[it->y]]=i;
}
if(row[i].size()<=1){
continue;
}
it=row[i].end();it=next(it,-1);
if(len[it->y]<=1){
line[it->y][++len[it->y]]=i;
}
else{
int pos=1;
if(row[line[it->y][2]].front().y==it->y){
}
else{
pos=2;
}
del(line[it->y][2],pos);
line[it->y][++len[it->y]]=i;
}
}
for(int i=1;i<=idx;i++){
if(row[i].size()<=0){
continue;
}
ans[row[i].front().i]=1;
ans[row[i].back().i]=1;
}
for(int i=1;i<=n;i++){
cout<<ans[i];
}
return 0;
}
}
int n;
struct node{
int x,y;
int i;
}a[N];
map<int,int>mp;
int fmp[N];
vector<int>b;
int idx;
struct NODE{
int y;
int i;
};
list<NODE>row[N];
set<int>line[N];
int ans[N];
bool cmp(node x,node y){
return (x.x<y.x)||(x.x==y.x&&x.y<y.y)||(x.x==y.x&&x.y==y.y&&x.i<y.i);
}
signed main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld%lld",&a[i].x,&a[i].y);
b.push_back(a[i].x);
b.push_back(a[i].y);
a[i].i=i;
}
int maxx=0;
int maxy=0;
for(int i=1;i<=n;i++){
maxx=max(maxx,a[i].x);
maxy=max(maxy,a[i].y);
}
if(maxx*maxy==n){
// cout<<"YES\n";
TEST3::n=n;
for(int i=1;i<=n;i++){
TEST3::a[i].i=a[i].i;
TEST3::a[i].x=a[i].x;
TEST3::a[i].y=a[i].y;
}
TEST3::main();
return 0;
}
sort(b.begin(),b.end());
for(int x:b){
if(mp[x]){
continue;
}
mp[x]=++idx;
fmp[idx]=x;
}
for(int i=1;i<=n;i++){
a[i].x=mp[a[i].x];
a[i].y=mp[a[i].y];
// cout<<a[i].x<<" "<<a[i].y<<endl;
}
sort(a+1,a+1+n,cmp);
int min1=LONG_LONG_MAX;
for(int i=1;i<=n;i++){
row[a[i].x].push_back({a[i].y,a[i].i});
// min1=min(min1,a[i].y);
}
for(int i=1;i<=idx;i++){
if(row[i].size()<=0){
continue;
}
min1=min(min1,row[i].front().y);
}
for(int i=1;i<=idx;i++){
if(row[i].size()<=0){
continue;
}
list<NODE>::iterator it=row[i].begin();
line[it->y].insert(i);
if(row[i].size()<=1){
continue;
}
it=row[i].end();it=next(it,-1);
line[it->y].insert(i);
}
while(1){
int cnt=0;
for(int i=idx;i>=1;i--){
// if(i==min1){
// if(line[i].size()<=2){
// break;
// }
// for(set<int>::iterator it=next(line[i].begin(),1);it!=next(line[i].end(),-1);it++){
// row[*it].pop_front();
//// cout<<i<<" "<<" - "<<(*it)<<endl;
//// if(row[*it].size()>=2){
//// line[row[*it].back().y].insert(*it);
//// }
// }
// break;
// }
vector<int>er;
if(line[i].size()>2){
// cout<<j<<" "<<line[i].size()<<endl;
for(set<int>::iterator it=next(line[i].begin(),1);it!=next(line[i].end(),-1);it++){
er.push_back(*it);
if(row[*it].back().y==i){
row[*it].pop_back();
if(row[*it].size()>=2){
line[row[*it].back().y].insert(*it);
cnt++;
}
}
else{
row[*it].pop_front();
if(row[*it].size()>=2){
line[row[*it].front().y].insert(*it);
cnt++;
}
}
// cout<<i<<" "<<" - "<<(*it)<<endl;
}
// len[i]=2;
}
for(int x:er){
line[i].erase(x);
}
}
if(!cnt){
break;
}
}
for(int i=1;i<=idx;i++){
if(row[i].size()<=0){
continue;
}
ans[row[i].front().i]=1;
ans[row[i].back().i]=1;
}
for(int i=1;i<=idx;i++){
if(row[i].size()<=0){
continue;
}
// cout<<i<<" "<<row[i].front().y<<" A"<<endl;
// cout<<i<<" "<<row[i].back().y<<" A"<<endl;
// ans[row[i].front().i]=1;
// ans[row[i].back().i]=1;
}
// cout<<len[1]<<endl;
for(int i=1;i<=n;i++){
// cout<<ans[i];
printf("%lld",ans[i]);
}
return 0;
}
/*
11
4 2
1 2
1 1
3 3
2 1
4 1
2 3
2 4
1 4
4 3
3 4
*/